angular1.5版本的自我认识

一、零散知识:

1.作用域:$scope对象是模版的域模型,也为作用域实例。通过为其属性赋值,可传递数据给模板渲染。

2.控制器:(controller),主要是初始化作用域实例。

  a.提供模型的初始值;

   b.增加UI相关行为(函数),以扩展$scope对象。

3.深入作用域:

  3.1 $rootscope是其它所有作用域的父作用域,$parent指向父作用域,但尽量避免使用这两个属性。

4.每个作用域实例都有$on方法,用于注册(register)作用域事件,被分发的event对象会做为第一个参数传入,后续参数则会一句事件负载的信息和事件类型(event-type)而定。

$scope.$on('$locationChangeSuccess',function(event,newUrl,oldUrl){
       //在这里对地址(location)的变化做出反映;
       //例如,根据新的URL更新面包屑导航
  
    })

  4.1event对象也有preventDefault()和stopPropagation()方法,但与DOM无共同之处。

  4.2在angular中,仅有三个事件($includeContentRequested,$includeContentLoaded,$viewcontentLoaded)可以被向上分发(emitted),七个事件($locationChangeStart,$locationChangeSuccess,$routeUpdate,$rootChangeStart,$routeChangeSuccess,$routeChangeError,$destroy)可以被向下广播(broadCasted)。

5.重要规则:永远不要在angular的控制器中操纵DOM元素。如果想使用JQuery,需要在angular之前引用,但最好不要zai angular中过多依赖jquery。

二、模块与依赖注入

  1.模块

angular.module('app', ['cars', 'engines'])
        .controller('AppCtrl', function($scope, car) {
            car.start();
        });

    1.1定义新的模块,需要传入名字,作为调用module的第一个参数,而第二个参数则表达此模块依赖哪些模块,不依赖也不能省[]。

    1.2angular.module的调用会返回新创建模块的实例,然后开始定义新的控制器。a.控制器的名字(字符串类型;b.控制器的构造函数;

  2.依赖注入

    2.1例如$scope神秘注入控制器。

  3.注册服务

    3.1接入依赖注入机制的第一步,是将对象注册在模块(module)上。

    3.2使用myMod.service('notice',function(a){this.a = a;}) 构造函数创建的新对象。

     使用myMod.factory('notice',function(a){return {haha:a}}),工厂函数返回的新对象。

      使用myMod.provide(), $get工厂函数创建的新对象。

    3.3常量:myod.contant('maxLen',10);

  4.模块依赖

    4.1定义在某模块中的服务,对其他模块可见。即模块的层级不会影响服务对其他模块的透明度。即它在不同模块中定义的所有服务都被导入应用,相当于全局命名空间。

    4.2服务是不能重名的,父模块的服务会覆盖子模块中的同名服务。例子如下:输出是String222;

    4.3至此,还不支持模块内的私有服务。

 1 (function(angular) {
 2     angular.module('app', ['cars', 'engines'])
 3         .controller('AppCtrl', function($scope, car) {
 4             car.start();
 5         });
 6 
 7     angular.module('cars', [])
 8         .factory('car', function($log, dieseEngine) {
 9             return {
10                 start: function() {
11                     $log.info('Starting' + dieseEngine.type);
12                 }
13             };
14         })
15         .factory('dieseEngine', function() {
16             return {
17                 type: 'haha'
18             };
19         });
20     angular.module('engines', [])
21         .factory('dieseEngine', function() {
22             return {
23                 type: "222"
24             };
25         });
26 })(angular);

四、angular文件与模块

  遵循原则:坚持一个文件等于一个angular模块的原则。目标单一,维护相对小,且无须关心文件加载顺序。

  4.1模块一旦被定义,就可以用来注册对象创建方案。这些方案在angular术语中称为provider。每个provider在执行时,都会产生一个运行时服务实例,尽管服务创建方案时可以有多种方式(factory,service,provider和变量),但最后结果都一样,配置过的服务实例。

  4.2注册新的providers,首先要活的模块的实例。对angular.module方法的调用就会返回它。

var admin = angular.module('admin-projects',[]);