• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

AngularJS实现表单验证

angularjs 搞代码 4年前 (2021-12-31) 42次浏览 已收录 0个评论

客户端表单验证是AngularJS里面最酷的功能之一。 AngularJS表单验证可以让你从一开始就写出一个具有交互性和可相应的现代HTML5表单。在AngularJS中,有许多表单验证指令。在这里,我们将谈谈几个最流行指令,然后我们将讨论如何编写自定义的验证。

虽然我不是前端程序员,但明白前端做好验证是多么重要。

因为这样后端就可以多喘口气了,而且相比后端什么的果然还是前端可以提高用户的幸福感。

AngularJS提供了很方便的表单验证功能,在此记录一番。

首先从下面这段代码开始

代码如下:

   

Email:
       
       
            Email is required.
            Invalid email address.
       

   

   

       
   

input标签的一些验证选项,通常和HTML5标记搭配使用。

必填

长度

使用指令ng-minlength/ng-maxlength

特定格式
例如电子邮件、URL、数字,将type设置为相应类型即可,例如:

代码如下:

模式匹配

使用指令ng-pattern,例如:

代码如下:

表单属性,通过这些属性可以更容易地对表单进行操作

pristine/dirty
表示是否已修改,例如

代码如下:

    {{mainForm.userEmail.$pristine}}
    {{mainForm.userEmail.$dirty}}

以formName.fieldName.$pristine方式访问,input必须有ng-model声明。

代码如下:
valid/invalid

表示是否通过验证。

代码如下:
$error

表单验证信息,验证不通过时返回相应信息。

AngularJS为表单状态提供了相应地css class

代码如下:
.ng-pristine
.ng-dirty
.ng-valid
.ng-invalid

例如,让验证通过为绿色,失败为红色:

代码如下:
input.ng-valid {
    color: green;
}
input.ng-invalid {
    color: green;
}

给出的例子中仅仅是一个email的验证就写了这么多,如果再加几个field,再加几种不同的提示,再加上几个事件,代码会变得杂乱不堪。

事实上并不推荐这样做,我们有更好的方法。
就是使用angular-messages.js

首先,不要忘了这两步

代码如下:

angular.module(‘myApp’, [‘ngMessages’])

好,先用ng-messages和ng-message替换掉那些重复的东西,上面的例子变成:

代码如下:

   

Email:
        <input
        type=”email” name=”email” ng-model=”myEmail” ng-minlength=”3″ ng-maxlength=”50″ required />
       

           

Email is required.

           

Invalid email address.

           

min length 10

           

max length 50

       

   

   

       
   

功能上没有任何变化,只是把重复的代码全部去掉了。
注意区分ng-messasges和ng-message,有没有感觉有点像with()? 后面的ng-messages-multiple,这里用作同时让多个提示出现。

但这样仍然不够好,就算省去了ng-message中的内容,但是多个field中都存在required验证时仍然会有重复。
而且,如果不同页面中的表单都涉及到相同的内容时重复的验证提示会越来越多。
为了解决这个问题,我们可以使用ng-messages-include指令。
该指令用来引用模板,比如上面的例子变为:

代码如下:

   

Email:
        <input
        type=”email” name=”email” ng-model=”myEmail” ng-minlength=”3″ ng-maxlength=”50″ required />
       

       

   

   

   来源gaodaimacom搞#代%码网    
   

并不复杂,我们再加点东西。
为了让提示更友好(?)一些,我们试试实现光标离开后出现提示的效果。
这时候用指令(directive)会方便很多,在这里先涉及一点和指令相关的内容。

先运行起来再说:

代码如下:
var myApp = angular.module(‘myApp’,[])
    .controller(‘validationController’, [‘$scope’,function($scope) {
        $scope.user = ‘Kavlez’;
        $scope.email = ‘[email protected]’;
    }])
    .directive(‘hintOnBlur’, [function() {
        return {
            require: ‘ngModel’,
            link: function(scope, element, attrs, ctrl) {
                ctrl.focused = false;
                element.bind(‘focus’, function(evt) {
                    scope.$apply(function() {ctrl.focused = true;});
                }).bind(‘blur’, function(evt) {
                    scope.$apply(function() {ctrl.focused = false;});
                });
            }
        }
    }]);

此处我们用focused来判断光标是否在某个属性上,当使用了hintOnBlur指令的对象上发生focus或blur事件时focused的状态发生变化。

表单也跟着改变一下,使用方法如下:

代码如下:

   

Email:
       
       

       

   

   

       
   

在ng-show中再加入对focused的判断,false时出现提示。

现在看起来像那么回事了。
自定义验证方式与有效性(validity),这个也用到指令(directive)。
验证填写的email是否已占用,这里简单模拟一下:

代码如下:
.directive(‘isAlreadyTaken’, function() {
    return {
        require: ‘ngModel’,
        link: function(scope, ele, attrs, ctrl) {
            ctrl.$parsers.push(function(val) {
                ctrl.$setValidity(’emailAvailable’, false);
                var emailTable = [
                    ‘[email protected]’,
                    ‘[email protected]’,
                    ‘[email protected]’,
                    ‘[email protected]’,
                    ‘[email protected]’,
                    ‘[email protected]’];
                for (var i=0;i<emailTable.length;i+=1)
                    if(val==emailTable[i])
                        return;
                ctrl.$setValidity(’emailAvailable’, true);
                return val;
            })
        }
    }
})

Input元素中加上is-already-taken属性,并且再加一个ng-message:

代码如下:

Already taken! try other email addresses!

以上就是AngularJS实现表单验证的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:AngularJS实现表单验证

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址