我在AngularJS文档中读到:
$ setViewValue(值)
它将更新$ viewValue,然后通过每个传递此值 $ parsers中的函数,包括任何验证器。价值 来自这个$ parsers管道,应用于$ modelValue 和ng-model属性中指定的表达式。
有人可以向我解释它在什么意思上说#34;通过$ parsers"中的每个函数传递这个值。
解析器是什么?这些解析器是否与HTML标记有关。我问的原因是因为我的指令似乎是以某种方式在数据中添加HTML标记。
答案 0 :(得分:2)
不,$解析器与HTML标记没有任何关系。
$parsers
是ngModelController的成员。这是一系列功能。当viewValue
更改(您在表单控件中输入的内容,例如<input>
)时,$parsers
数组中的每个函数都会解析 确定最终的modelValue(控制器中的模型)。
$parsers
数组中的函数通常用于在设置模型之前验证输入。通常,如果用户输入无效,则拒绝更改,并将模型保留为原始状态。
例如,在表单控件(required
,input
,select
等)上,由Angular本机定义的textarea
指令。该指令确保模型值设置为truthy值,并且在未通过验证的情况下将模型标记为无效:
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的引用。