Angular项目笔记
记录📝点Angular项目开发过程中 不熟悉的、陌生的、自认为有需要注意的。
以 autoPublisher
Project为例.
项目结构划分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| ├── Temp ├── app ├── build ├── build_w ├── data ├── demo ├── dist ├── gulpfile.js ├── node_modules ├── package-lock.json ├── package.json ├── readme.md ├── tmp └── webpack.config.js
. ├── app.js ├── css │ ├── fishBone.css │ └── imports.css ├── favicon.ico ├── img │ ├── arrow.png │ ├── jdb_blue_logo.png │ ├── jdb_logo.png │ ├── line-first.png │ ├── line-point.png │ ├── loading.gif │ └── title.png ├── index.html ├── js │ ├── controllers │ ├── directives │ ├── filters │ └── services ├── lib │ ├── angular │ ├── bootstrap │ ├── fishBone.js │ ├── font-awesome-4.7.0 │ ├── jquery │ └── layui └── views ├── autoPublishFishBone.html ├── autoPublishFooter.html ├── autoPublishNavigationBar.html └── autoPublishVersion.html
. ├── controllers │ └── index.controller.js ├── directives │ ├── indexFishBone.directive.js │ ├── indexFooter.directive.js │ ├── indexNavigationBar.directive.js │ └── indexVersion.directive.js ├── filters │ └── fishBone.filter.js └── services ├── api.service.js ├── fishBone.service.js ├── fishBoneAction.service.js └── utils.service.js
|
核心功能主要在app/js
下实现。 controllers
主要是对整个控制器。directives
是对页面每个块儿的定义以及监听数据变化然后调用Service
方法进行页面渲染、数据更新等。filters
是对接口返回的数据进行二次处理与包装的过滤器。services
文件夹下的Service主要是对公共方法封装以及提供给directive中使用的一些方法。
在页面中这 controllers
directives
filters
services
的引用顺序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
require('./js/services/utils.service.js'); require('./js/services/api.service.js'); require('./js/services/fishBone.service.js'); require('./js/services/fishBoneAction.service.js');
require('./js/controllers/index.controller.js');
require('./js/filters/fishBone.filter.js');
require('./js/directives/indexNavigationBar.directive.js'); require('./js/directives/indexVersion.directive.js'); require('./js/directives/indexFishBone.directive.js'); require('./js/directives/indexFooter.directive.js');
|
首先,控制器index.controller
依赖:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var jdbAutoPublisherApps = angular.module('jdbAutoPublisherApp', ['jdbAutoPublisherAPIModule', 'jdbAutoPublisherFishBoneModule', 'jdbAutoPublishUtilsModule', 'jdbAutoPublisherFishBoneActionModule']);
jdbAutoPublisherApps.controller('jdbAutoPublisherCtrl', function($scope, jdbAutoPublishUtilsService, jdbAutoPublisherAPIService, $filter) { }
jdbAutoPublisherApps.controller('jdbAutoPublisherCtrl', ['$scope', 'jdbAutoPublishUtilsService', 'jdbAutoPublisherAPIService', '$filter', function($scope, jdbAutoPublishUtilsService, jdbAutoPublisherAPIService, $filter) { }]);
jdbAutoPublisherApps.controller('jdbAutoPublisherCtrl', controllerFn); controllerFn.$inject = ['$scope', 'jdbAutoPublishUtilsService', 'jdbAutoPublisherAPIService', '$filter'];
function controllerFn() { }
|
在controller
中如何正确使用Filter
?
首先,依赖注入$filter
, 其次,使用语法:
$filter('filter名字')(参数)
即可。
再看看 indexFishBone.directive
, 其需要调用fishBone.service
和 api.service
以及 fishBoneAction.serivce
里的方法,那么只需在controller的moudle声明是添加对应的依赖,然后再这个directive中的function里注入依赖的Service名即可。
BTW,如果在directive的return里声明了scope: {}
则表示该directive的scope
作用域与controller中以及该应用其它地方声明的所有scope
作用域都是隔离的。
其次,directive中如何获取controller中的值?或:controller与directive如何通信?
当controller通过Service或filter获取到数据后,绑定到scope
作用域,在directive中使用$watch
监听该作用域上的值即可。(前提:directive中的Scope作用域未隔离!)
1 2 3 4 5 6
| scope.$watch('fishData', function(newVlaue) { if (scope.fishData) { } });
|