为什么$ setViewValue通过解析器传递数据?
我在AngularJS文档中读到:
$ setViewValue(值)
它将更新$ viewValue,然后将这个值传递给$ parsers中的每个函数,其中包括任何验证器。 来自这个$ parsers管道的值应用于$ modelValue和在ng-model属性中指定的表达式。
有人可以向我解释它说“通过$解析器中的每个函数传递此值”的含义。
什么解析器? 这些解析器是否与HTML标签有关? 我问的原因是因为我的指令似乎是以某种方式向数据添加HTML标签。
不,$ parser与HTML标签没有任何关系。
$parsers
是ngModelController的成员。 这是一组函数。 当viewValue
被改变时(你输入到你的表单控件元素,例如<input>
),它将在解析最终的modelValue(控制器中的模型)之前被$parsers
数组中的每个函数解析。
在设置模型之前, $parsers
数组中的函数通常用于验证输入。 通常,如果用户输入无效,则更改将被拒绝,并且模型将保持原始状态。
例如, required
指令(如Angular本身定义的),用于表单控件( input
, select
, textarea
等)。 该指令确保将模型值设置为真值,并且在未通过验证的情况下将该模型标记为无效:
var validator = function(value) {
if (attr.required && ctrl.$isEmpty(value)) {
ctrl.$setValidity('required', false);
return;
} else {
ctrl.$setValidity('required', true);
return value;
}
};
ctrl.$parsers.unshift(validator);
在这个例子中, ctrl
是对ngModelController的引用。