Page 106 - AngularJS权威教程
P. 106

86  第 10 章  指令详解


             10.3.3  controllerAs(字符串)

                 controllerAs参数用来设置控制器的别名,可以以此为名来发布控制器,并且作用域可以访
             问controllerAs。这样就可以在视图中引用控制器,甚至无需注入$scope。
                 例如,创建一个MainController,然后不要注入$scope,如下所示:

                 angular.module('myApp')
                 .controller('MainController', function() {
                     this.name = "Ari";
                 });
                 现在,在HTML中无需引用作用域就可以使用MainController。

                 <div ng-appng-controller="MainControllerasmain">
                     <input type="text" ng-model="main.name" />
                     <span>{{ main.name }}</span>
                 </div>

                 这个参数看起来好像没什么大用,但它给了我们可以在路由和指令中创建匿名控制器的强大
             能力。这种能力可以将动态的对象创建成为控制器,并且这个对象是隔离的、易于测试的。
                 例如,可以在指令中创建匿名控制器,如下所示:

                 angular.module('myApp')
                 .directive('myDirective', function() {
                     return {
                         restrict: 'A',
                         template: '<h4>{{ myController.msg }}</h4>',
                         controllerAs: 'myController',
                         controller: function() {
                             this.msg = "Hello World"
                         }
                     };
                 });

             10.3.4  require(字符串或数组)

                 require参数可以被设置为字符串或数组,字符串代表另外一个指令的名字。 require会将控
             制器注入到其值所指定的指令中,并作为当前指令的链接函数的第四个参数。

                 字符串或数组元素的值是会在当前指令的作用域中使用的指令名称。
                 scope会影响指令作用域的指向,是一个隔离作用域,一个有依赖的作用域或者完全没有作
             用域。在任何情况下,AngularJS编译器在查找子控制器时都会参考当前指令的模板。
                 如果不使用^前缀,指令只会在自身的元素上查找控制器。

                 //...
                 restrict: 'EA',
                 require: 'ngModel'
                 //...
                 指令定义只会查找定义在指令作当前用域中的ng-model=""。

                 <!-- 指令会在本地作用域查找ng-model -->
                 <div my-directive ng-model="object"></div>
   101   102   103   104   105   106   107   108   109   110   111