我在控制器内部的 AngularJS 应用程序中有以下代码,该控制器是从 ng-submit 函数调用的,该函数属于具有 name 的表单profileForm
:
$scope.updateProfile = function() {
if($scope.profileForm.$invalid) {
//error handling..
}
//etc.
};
在这个函数内部,有没有办法找出哪些字段导致整个表单被称为无效?
我在控制器内部的 AngularJS 应用程序中有以下代码,该控制器是从 ng-submit 函数调用的,该函数属于具有 name 的表单profileForm
:
$scope.updateProfile = function() {
if($scope.profileForm.$invalid) {
//error handling..
}
//etc.
};
在这个函数内部,有没有办法找出哪些字段导致整个表单被称为无效?
每个输入name
的验证信息都作为属性在form
's name in 中公开scope
。
HTML
<form name="someForm" action="/">
<input name="username" required />
<input name="password" type="password" required />
</form>
JS
$scope.someForm.username.$valid
// > false
$scope.someForm.password.$error
// > { required: true }
暴露的属性是$pristine
, $dirty
, $valid
, $invalid
, $error
.
如果您出于某种原因想要迭代错误:
$scope.someForm.$error
// > { required: [{$name: "username", $error: true /*...*/},
// {$name: "password", /*..*/}] }
每个错误的规则都将在 $error 中公开。
这是一个可以玩的 plunkr http://plnkr.co/edit/zCircDauLfeMcMUSnYaO?p=preview
用于检查表单的哪个字段无效
console.log($scope.FORM_NAME.$error.required);
这将输出表单的无效字段数组
如果您想查看哪些字段影响了您的验证并且您有 jQuery 来帮助您,只需在 javascript 控制台上搜索“ng-invalid”类。
$('.ng-invalid');
它将列出所有因任何原因未能通过验证的 DOM 元素。
你可以循环遍历form.$error.pattern
。
$scope.updateProfile = function() {
var error = $scope.profileForm.$error;
angular.forEach(error.pattern, function(field){
if(field.$invalid){
var fieldName = field.$name;
....
}
});
}
我想在禁用的保存按钮工具提示中显示所有错误,这样用户就会知道为什么禁用而不是上下滚动长表单。
if (frm) {
disable = frm.$invalid;
if (frm.$invalid && frm.$error && frm.$error.required) {
frm.$error.required.forEach(function (error) {
disableArray.push(error.$name + ' is required');
});
}
}
if (disableArray.length > 0) {
vm.disableMessage = disableArray.toString();
}
当任何字段无效时,如果您尝试获取其值,它将是undefined
.
假设您附加了一个文本输入$scope.mynum
,仅当您输入数字并且您已经输入时才有效ABC
。
如果您尝试获取 的值$scope.mynum
,则为undefined
; 它不会返回ABC
.
(可能你知道这一切,但无论如何)
因此,我将使用一个数组,其中包含我已添加到范围中的所有需要验证的元素,并使用过滤器(例如使用 underscore.js)来检查哪些元素返回为typeof
undefined
.
这些将是导致无效状态的字段。
如果您想在没有编程方式的情况下查找使 UI 上的表单无效的字段,只需右键单击检查(在元素视图中打开开发人员工具),然后在此选项卡中使用 ctrl+f 搜索 ng-invalid。然后,对于您找到 ng-invalid 类的每个字段,您可以检查字段是否在需要时没有给出任何值,或者它可能违反的其他规则(无效的电子邮件格式、超出范围/最大/最小定义等) . 这是最简单的方法。
对于我的应用程序,我显示如下错误:
<ul ng-repeat="errs in myForm.$error">
<li ng-repeat="err in errs">{{err.$name}}</li></ul>
如果您想查看所有内容,只需用户 'err' 将显示如下内容:
"$validators": {},
"$asyncValidators": {},
"$parsers": [],
"$formatters": [],
"$viewChangeListeners": [],
"$untouched": true,
"$touched": false,
"$pristine": true,
"$dirty": false,
"$valid": false,
"$invalid": true,
"$error": { "required": true },
"$name": "errorfieldName",
"$options": {}
格式不是很好,但你会在那里看到这些东西......