关于这个问题:http://plnkr.co/edit/GzC9ufa1WJmKQ6Ad15v9?p=preview
我有一个指令,该指令可以运行测试,然后使用结果调用$scope.form['myfield'].setValidity()
。但是,这不会反映在视图或控制器中。
始终设置false
的简单示例:
app.directive('myDirective', function() {
return {
link: function(scope, elem, attrs) {
elem.on('blur change', function() {
console.log("start valid:" + scope.form[attrs.name].$valid);
scope.form[attrs.name].$setValidity('myfield', false);
console.log("end valid:" + scope.form[attrs.name].$valid);
});
}
};
});
在我看来:
<input type="text" ng-model="myModel" name="myfield" my-directive/>
控制台日志记录确认指令中的事件首次触发时,该字段有效,然后在setValidity之后它变为false。在后续事件中,在事件触发之前为false。但是,当我在视图中打印出
{{form['myfield'].$valid}}
时,无论如何它仍为true
。我想这可能是一个计时性的事情,到
setValidity(false)
在指令中运行时,视图已经检查完毕。我该如何解决? 最佳答案
将代码包装在$ apply中以触发摘要:
app.directive('myDirective', function() {
return {
link: function(scope, elem, attrs) {
elem.on('blur change', function() {
console.log("start valid:" + scope.form[attrs.name].$valid);
scope.$apply(function() {
scope.form[attrs.name].$setValidity('myfield', false);
console.log("end valid:" + scope.form[attrs.name].$valid);
});
});
}
};
});