AngularJS:列出所有表单错误
背景:我目前正在使用标签工作的应用程序; 我想列出未通过validation的字段/部分,以指导用户在正确的选项卡中查找错误。
所以我试图利用form.$error
来做到这一点; 但我不完全得到它的工作。
如果validation错误发生在ng-repeat
,例如:
<div ng-repeat="url in urls" ng-form="form"> <input name="inumber" required ng-model="url" /> <br /> </div>
空值的结果是form.$error
包含以下内容:
{“required”:[ { “inumber”:{} }, { “inumber”:{} } ]}
另一方面,如果validation错误发生在这个ng-repeat
:
<input ng-model="name" name="iname" required="true" />
form.$error
对象包含以下内容:
{“required”:[{}]}
但是,我期望以下内容:
{“required”:[{'iname':{}}]}
任何想法,为什么元素的名称是失踪?
一个正在运行的plunkr可以在这里find: http ://plnkr.co/x6wQMp
正如@ c0bra在注释中指出的那样form.$error
对象被填充,它不会像JSON那样被抛出。
通过form.$errors
循环form.$errors
,它的嵌套对象将得到所需的结果。
<ul> <li ng-repeat="(key, errors) in form.$error track by $index"> <strong>{{ key }}</strong> errors <ul> <li ng-repeat="e in errors">{{ e.$name }} has an error: <strong>{{ key }}</strong>.</li> </ul> </li> </ul>
所有的功劳都转到了c0bra上。
另一个select是使用这个问题的解决scheme之一来为dynamic创build的input分配唯一的名称。
我做了一个你传递给表单的函数。 如果有表单错误,它将显示在控制台中。 它显示的对象,所以你可以看看。 我把它放在我的保存function。
function formErrors(form){ var errors = []; for(var key in form.$error){ errors.push(key + "=" + form.$error); } if(errors.length > 0){ console.log("Form Has Errors"); console.log(form.$error); } };
Brett DeWoody的回答是正确的。 我想在我的控制器中做逻辑。 所以我写了下面,这是根据user5045936给出的答案。 这也可能有助于你想要去控制器路线的一些人。 顺便说一句,我使用toaster指令来显示我的用户validation消息。
if (!vm.myForm.$valid) { var errors = []; for (var key in vm.myForm.$error) { for (var index = 0; index < vm.myForm.$error[key].length; index++) { errors.push(vm.myForm.$error[key][index].$name + ' is required.'); } } toaster.pop('warning', 'Information Missing', 'The ' + errors[0]); return; }
如果你有嵌套表单,那么你会发现这有帮助:
function touchErrorFields(form) { angular.forEach(form.$error, function (field) { angular.forEach(field, function(errorField) { if (!errorField.hasOwnProperty('$setTouched')) { touchErrorFields(errorField); } else { errorField.$setTouched(); } }) }); }