自定义指令中ngModelCtrl.$parsers.unshift
和ngModelCtrl.$parsers.push
的确切区别是什么?
我想迫使angular验证发生在model
而不是form
本身上的某些事情的形式。我尝试设置Form.$setSubmitted
,但我知道这不是应该做的方法。经过几次谷歌搜索后,我发现在自定义验证指令中必须使用类似ngModelCtrl.$parsers.unshift
的名称。
我的指令有责任检查绑定到ng-model
的数组的长度:
return {
restrict: 'A',
require: 'ngModel',
link: function ($scope, elem, attrs, ngModelCtrl) {
ngModelCtrl.$parsers.push(function (viewValue) {
// doesn't enter this function at all!
console.log(viewValue);
});
ngModelCtrl.$validators.requiredCount = function (modelValue, viewValue) {
// executed at the first time only at initialize
return modelValue.length == attrs.requiredCount;
};
}
};
以及我如何使用它:
<list orientation="vertical" type="PropertyValue" ng-model="Entity.PropertyValues"
dont-save
ng-required="PropertyTypeIdObject.Code === 'FixedValues'"
required-count="1"></list>
list
本身是负责处理绑定到ng-model
的数组的指令。 最佳答案
从Parsers documentation parsers
是Array of functions
每当控件时要作为管道执行的函数数组
使用DOM中的新$ viewValue更新ngModelController,
通常通过用户输入。有关详细的生命周期,请参见$ setViewValue()
说明。注意,绑定时不调用$ parsers
ngModel表达式以编程方式更改。
这些函数按数组顺序调用,每个传递其返回值
到下一个。最后的返回值转发到
$ validators集合。
所以,在你的代码中
ngModelCtrl.$parsers.push(function (viewValue) {
// doesn't enter this function at all!
console.log(viewValue);
});
您正在将新的
function
推送到parsers
数组以验证ngModel controller
现在,
unshift
和push
之间的区别:Unshift
和shift
使整个数组移位sideways
(通过从一开始添加和删除项)
Push
和pop
不会使阵列侧移(因为它们最后添加和删除项)
因此,
ngModelCtrl.$parsers.unshift
insert
您对first index
和ngModelCtrl.$parsers.push
的函数将insert
您对last index
的函数