Page 110 - AngularJS权威教程
P. 110

90  第 10 章  指令详解


             进行链接后被调用,因此它负责设置事件监听器,监视数据变化和实时的操作DOM。
                 link函数对绑定了实时数据的DOM具有控制能力,因此需要考虑性能问题。回顾一下10.4
             节中关于性能的考虑,在选择是用编译函数还是链接函数实现功能时,将性能影响考虑进去。

                 链接函数的签名如下:

                 link: function(scope, element, attrs) {
                     // 在这里操作DOM
                 }
                 如果指令定义中有require选项,函数签名中会有第四个参数,代表控制器或者所依赖的指
             令的控制器。

                 // require 'SomeController',
                 link: function(scope, element, attrs, SomeController) {
                     // 在这里操作DOM,可以访问required指定的控制器
                 }
                 如果require选项提供了一个指令数组,第四个参数会是一个由每个指令所对应的控制器组
             成的数组。

                 下面看一下链接函数中的参数:
                 scope

                 指令用来在其内部注册监听器的作用域。
                 iElement

                 iElement参数代表实例元素,指使用此指令的元素。在postLink函数中我们应该只操作此
             元素的子元素,因为子元素已经被链接过了。
                 iAttrs
                 iAttrs参数代表实例属性,是一个由定义在元素上的属性组成的标准化列表,可以在所有指
             令的链接函数间共享。会以JavaScript对象的形式进行传递。

                 controller
                 controller参数指向require选项定义的控制器。如果没有设置require选项,那么
             controller参数的值为undefined。

                 控制器在所有的指令间共享,因此指令可以将控制器当作通信通道(公共API)。如果设置了
             多个require,那么这个参数会是一个由控制器实例组成的数组,而不只是一个单独的控制器。

             10.5  ngModel


                 ngModel是一个用法特殊的指令,它提供更底层的API来处理控制器内的数据。当我们在指令
             中使用ngModel时能够访问一个特殊的API,这个API用来处理数据绑定、验证、CSS更新等不实
             际操作DOM的事情。

                 ngModel控制器会随ngModel被一直注入到指令中,其中包含了一些方法。为了访问
             ngModelController必须使用require设置(像前面的例子中那样):
   105   106   107   108   109   110   111   112   113   114   115