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

时间:2014-01-02 10:41:47

标签: angularjs

我在AngularJS文档中读到:

  

$ setViewValue(值)

     

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

有人可以向我解释它在什么意思上说#34;通过$ parsers"中的每个函数传递这个值。

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

1 个答案:

答案 0 :(得分:2)

不,$解析器与HTML标记没有任何关系。

$parsersngModelController的成员。这是一系列功能。当viewValue更改(您在表单控件中输入的内容,例如<input>)时,$parsers数组中的每个函数都会解析 确定最终的modelValue(控制器中的模型)。

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

例如,在表单控件(requiredinputselect等)上,由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的引用。