为什么$ setViewValue通过解析器传递数据?

我在AngularJS文档中读到:

$ setViewValue(值)

它将更新$ viewValue,然后将这个值传递给$ parsers中的每个函数,其中包括任何验证器。 来自这个$ parsers管道的值应用于$ modelValue和在ng-model属性中指定的表达式。

有人可以向我解释它说“通过$解析器中的每个函数传递此值”的含义。

什么解析器? 这些解析器是否与HTML标签有关? 我问的原因是因为我的指令似乎是以某种方式向数据添加HTML标签。


不,$ parser与HTML标签没有任何关系。

$parsers是ngModelController的成员。 这是一组函数。 当viewValue被改变时(你输入到你的表单控件元素,例如<input> ),它将在解析最终的modelValue(控制器中的模型)之前被$parsers数组中的每个函数解析。

在设置模型之前, $parsers数组中的函数通常用于验证输入。 通常,如果用户输入无效,则更改将被拒绝,并且模型将保持原始状态。

例如, required指令(如Angular本身定义的),用于表单控件( inputselecttextarea等)。 该指令确保将模型值设置为真值,并且在未通过验证的情况下将该模型标记为无效:

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的引用。

链接地址: http://www.djcxy.com/p/77921.html

上一篇: Why does $setViewValue pass data through parsers?

下一篇: Set input invalid when typeahead