AngularJS:有没有办法确定哪些字段使表单无效?

GSt*_*Sto 93 validation angularjs

我在AngularJS应用程序中有以下代码,在控制器内部,从ng-submit函数调用,该函数属于具有名称的表单profileForm:

$scope.updateProfile = function() {
  if($scope.profileForm.$invalid) { 
    //error handling..
  }
  //etc.
};
Run Code Online (Sandbox Code Playgroud)

在这个函数内部,有没有办法弄清楚哪些字段导致整个表单被称为无效?

Umu*_*acı 90

每个输入name的验证信息都以form名称的形式公开scope.

HTML

<form name="someForm" action="/">
    <input name="username" required />
    <input name="password" type="password" required />
</form>
Run Code Online (Sandbox Code Playgroud)

JS

$scope.someForm.username.$valid
// > false
$scope.someForm.password.$error
// > { required: true }
Run Code Online (Sandbox Code Playgroud)

暴露属性$pristine,$dirty,$valid,$invalid,$error.

如果您想因某些原因迭代错误:

$scope.someForm.$error
// > { required: [{$name: "username", $error: true /*...*/},
//                {$name: "password", /*..*/}] }
Run Code Online (Sandbox Code Playgroud)

错误中的每个规则都将以$ error显示.

这是一个可以玩http://plnkr.co/edit/zCircDauLfeMcMUSnYaO?p=preview的玩家

  • 警告其他人陷入我的陷阱 - 您必须指定输入的`name`属性以查看$ name(当然).AngularJS绑定到模型属性而不需要名称的事实可能导致很难诊断哪个输入无效. (5认同)

Shi*_*mar 26

用于检查哪个表单字段无效

console.log($scope.FORM_NAME.$error.required);
Run Code Online (Sandbox Code Playgroud)

这将输出表单的无效字段数组


小智 15

如果你想看看哪些字段弄乱你的验证并且你有jQuery来帮助你,只需在javascript控制台上搜索"ng-invalid"类.

$('.ng-invalid');
Run Code Online (Sandbox Code Playgroud)

它将列出因任何原因未通过验证的所有DOM元素.


zs2*_*020 12

你可以循环form.$error.pattern.

$scope.updateProfile = function() {
    var error = $scope.profileForm.$error;
    angular.forEach(error.pattern, function(field){
        if(field.$invalid){
            var fieldName = field.$name;
            ....
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 取决于验证类型的@Anthony =)请参阅http://www.yearofmoo.com/2014/09/taming-forms-in-angularjs-1-3.html#html5-validators-and-parse-errors (3认同)
  • 这对我有用,除了形式.$ error.pattern,我使用了表单.$ error.required.没有"模式"属性.这有什么变化吗? (2认同)