Page 112 - AngularJS权威教程
P. 112

92  第 10 章  指令详解


             10.5.1  自定义渲染

                 在控制器中定义$render方法可以定义视图具体的渲染方式。这个方法会在$parser流水线
             完成后被调用。
                 由于这个方法会破坏AngularJS的标准工作方式,因此一定要谨慎使用:

                 angular.module('myApp')
                 .directive('myDirective', function() {
                     return {
                         require: '?ngModel',
                         link: function(scope, ele, attrs, ngModel) {
                             if (!ngModel) return;

                             ngModel.$render = function() {
                                 element.html(ngModel.$viewValue() || 'None');
                             };
                         }
                     };
                 });


             10.5.2 属性

                 ngModelController中有几个属性可以用来检查甚至修改视图。
                 1. $viewValue

                 $viewValue属性保存着更新视图所需的实际字符串。
                 2. $modelValue

                 $modelValue由数据模型持有。$modelValue和$viewValue可能是不同的,取决于$parser
             流水线是否对其进行了操作。
                 3. $parsers

                 $parsers的值是一个由函数组成的数组,其中的函数会以流水线的形式被逐一调用。
             ngModel从DOM中读取的值会被传入$parsers中的函数,并依次被其中的解析器处理。
                 这是为了对值进行处理和修饰。我们已经简单介绍过验证流水线是如何工作的了。更多关于
             通过创建$parser来进行验证的信息请查阅10.6节。

                 4. $formatters
                 $formatters的值是一个由函数组成的数组,其中的函数会以流水线的形式在数据模型的值
             发生变化时被逐一调用。它和$parser流水线互不影响,用来对值进行格式化和转换,以便在绑
             定了这个值的控件中显示。
                 5. $viewChangeListeners

                 $viewChangeListeners的值是一个由函数组成的数组,其中的函数会以流水线的形式在视
             图中的值发生变化时被逐一调用。通过$viewChangeListeners,可以在无需使用$watch的情况
             下实现类似的行为。由于返回值会被忽略,因此这些函数不需要返回值。
   107   108   109   110   111   112   113   114   115   116   117