我真的陷入了由此行造成的问题:ctrl.$setValidity('match', currentValue);
.directive('formMatch', ['$parse', '$timeout', '$log', function ($parse, $timeout, $log) {
return {
restrict: 'A'
,priority: 2
,require: 'ngModel'
,link: function(scope, elem, attrs, ctrl) {
scope.$watch(function() {
return (ctrl.$pristine && angular.isUndefined(ctrl.$modelValue)) || $parse(attrs.match)(scope) === ctrl.$modelValue;
}, function(currentValue) {
ctrl.$setValidity('match', currentValue);
});
}
};
}])
导致包含此输入的表单具有$ error值...例如
email: false
match: Array[1]
required: Array[2]
甚至在调用ctrl.$setValidity('match', true);
之后,这些错误也不会消失。但是如果我只是注释掉那一行,表单就会再次验证并正常工作。它似乎在某种程度上是" ctrl" var在调用此行时有时会引用该表单,但对我而言,它似乎不可能引用输入和表单......
无论如何都要做一个表格。$ updateValidity()?不是说这会有所帮助,但这是我想尝试的,因为我说,每个单独的表单输入都是$ valid === true。