$formatters和$parses

1.$viewValue

就是指令渲染模板所用的值,指令元素的视图中实际的值.注意,它一定等于 $setViewValue(value)的value值

2.$modelValue

是在控制器中流通的值,ngModel绑定的数据模型的模型值.它不一定等于 $setViewValue(value)的value值,在$setViewValue(value, trigger)里面提到的使用了ngModelOptions时,比如虽然调用了$setViewValue,但是因为设置了ngModelOptions的debounce属性,所以它会延迟,等到同步的时候,value值才会被设置到$modelValue上.

$formatters和$parses
除了$viewValue和$modelValue这两个属性之外,还有两个用来处理他们的方法。分别是$parses和$formatters。
前者的是作用是将$viewValue->$modelValue,后者的作用恰好相反,是将$modelValue->$viewValue。

3.$parsers

一个数组.数组里的元素是函数. $setViewValue(value)被赋值给$modelValue之前,value值首先会经过$parsers里的所有函数,每次将返回值传递给下一个函数.最后才被赋值到$modelValue.在这个过程中就包括了验证和转换.对于验证这个步骤,它会使用$setValidity这个方法,验证失败的将返回undefined.

4.$formatters

一个数组.数组里的元素是函数. 和$parsers一样,它也是管道.当模型值发生变化的时候被调用.模型值会倒着调用数组中的函数,然后把返回值传给下一个函数,最后返回的值就会被传递给dom元素.用来在视图中格式化模型值:

一个将小写转换为大写的格式化方法:

function formatter(value) {
if (value) {
return value.toUpperCase();
}
}
ngModel.$formatters.push(formatter);

$apply() 需要更新DOM时,比如调用地图组件时,地图组件方法中的回调函数不能自动更新view.

$setViewValue() 当我们通过某种途径监控到指令模板中的变量发生变化之后,我们调用$setViewValue()来更新$viewValue

$render()我们调用$render方法将$viewValue渲染到指令模板中去

可参见: http://blog.gejiawen.com/2015/12/20/using-ng-model-controller-with-angular-directive/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容