美文网首页
$formatters和$parses

$formatters和$parses

作者: 箱猫日和 | 来源:发表于2017-03-09 15:23 被阅读26次

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/

相关文章

网友评论

      本文标题:$formatters和$parses

      本文链接:https://www.haomeiwen.com/subject/krnwgttx.html