我试图获取表单中的所有字段并将其设置为脏。
这样的事情:
$timeout(function () {
$('input').each(function(){
$(this).$dirty=true;
});
}, 0);
这不起作用。我明白这样的事情很好用:
$scope.form.uName.$dirty = true;
但是当我使用jquery遍历所有字段时,出现了问题。
这是小提琴:http://jsfiddle.net/Qdk5M/1302/
感谢任何帮助。谢谢..
答案 0 :(得分:7)
自AngularJS 1.3.4起,您可以在字段(source)上使用 $ setDirty()。例如,对于有错误且标记为必需的所有字段,您可以执行以下操作:
angular.forEach($scope.form.$error.required, function(field) {
field.$setDirty();
});
答案 1 :(得分:0)
Jquery元素和Angular表单控制器是完全不同的东西。 Jquery元素没有$ dirty属性,form指令控制器中的变量具有该属性。您必须使用您发布的第二个脚本位。
答案 2 :(得分:0)
创建一个带有link
函数的指令,该函数遍历表单属性。使用匹配来避免任何包含$
的表单对象属性只能访问表单字段。将这些$dirty
属性设置为true
:
.directive('makeDirty', function(){
return function(scope, elem, attr) {
angular.forEach(scope.form, function(val, key){
if(!key.match(/\$/)) {
val.$dirty = true;
}
});
scope.form.$setDirty(); // you can make the form itself $dirty if you wish to
}
});
这里使用指令的优点是在表单准备好之前它不会运行链接代码;通过一些小的重构,它也可以在多个表单/控制器中重用。