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的情况
下实现类似的行为。由于返回值会被忽略,因此这些函数不需要返回值。