欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

如何使用AngularJS来进行表单验证

来源: 开发者 投稿于  被查看 29948 次 评论:41

如何使用AngularJS来进行表单验证


通过这个demo可以基本了解angular常用指令ng-app,ng-controller,ng-class,ng-if,ng-submit,ng-minlength,ng-maxlength等的使用,帮助理解scope(域)在angular中的意义,掌握如何使用angular来开发表单验证。

#####1、 html结构如下:

html 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用angularJS开开发表单验证</title>
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.4/css/bootstrap.min.css">
    <link rel="stylesheet" href="http://apps.bdimg.com/libs/fontawesome/4.4.0/css/font-awesome.min.css">
    <style>
        .form-wrap{font-family: "幼圆","Microsoft YaHei"}
        .form-wrap .title{margin: 150px 0 30px;text-align: center;}
        .form-group{position: relative;}
        .form-group .success{position: absolute;top: 9px;right: 25px;color: #3c763d;}
        .form-group .error{color: #a10;}
    </style>
</head>
<body>
<div class="container" ng-app="myApp" ng-controller="signUpCtrl">
    <div class="form-wrap">
        <form class="form-horizontal" name="signUpForm" ng-submit="submitForm();">
            <h2 class="title">注册</h2>
            <div class="form-group" ng-class="{'has-success' : signUpForm.username.$valid}">
                <label class="control-label col-sm-3">用户名:</label>
                <div class="col-sm-6">
                    <input  class="form-control" name="username" ng-model="userdata.username" ng-minlength="2" ng-maxlength="30" required type="text">
                    <p class="fa fa-check success" ng-if="signUpForm.username.$valid"></p>
                    <p class="error" ng-if="signUpForm.username.$error.required && signUpForm.username.$touched">用户名不能为空!</p>
                    <p class="error" ng-if="(signUpForm.username.$error.minlength || signUpForm.username.$error.maxlength) && signUpForm.username.$touched">用户名长度应为2-30个字</p>
                </div>
            </div>
            <div class="form-group" ng-class="{'has-success': signUpForm.password.$valid}">
                <label class="control-label col-sm-3">密码:</label>
                <div class="col-sm-6">
                    <input  class="form-control" name="password" ng-model="userdata.password" ng-minlength="6" ng-maxlength="30" required type="password">
                    <p class="fa fa-check success" ng-if="signUpForm.password.$valid"></p>
                    <p class="error" ng-if="signUpForm.password.$error.required && signUpForm.password.$touched">密码不能为空!</p>
                    <p class="error" ng-if="(signUpForm.password.$error.minlength || signUpForm.password.$error.maxlength) && signUpForm.password.$touched">密码长度应为6-30个字</p>
                </div>
            </div>
            <div class="form-group" ng-class="{'has-success':signUpForm.rePassword.$valid}">
                <label class="control-label col-sm-3">确认密码:</label>
                <div class="col-sm-6">
                    <input  class="form-control" name="rePassword" ng-model="userdata.rePassword" compare="userdata.password" required type="password">
                    <p class="error" ng-if="signUpForm.rePassword.$error.compare && signUpForm.rePassword.$touched">两次密码不一致!</p>
                </div>
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary col-sm-offset-3">提交</button>
            </div>
        </form>

        <!--信息提示-->
        <div class="alert alert-success" role="alert" hidden>
            <a href="javascript:void(0);" class="alert-link">注册成功!</a>
        </div>
        <div class="alert alert-danger" role="alert" hidden>
            <a href="javascript:void(0);" class="alert-link">信息有误,请检查!</a>
        </div>
    </div>
</div>
<script src="https://code.angularjs.org/1.3.16/angular.min.js"></script>
<script src="./js/main.js"></script>
</body>
</html>

#####2 、js代码如下:

javascript 代码

/**
 * Created by vickyzhu on 2016/6/28.
 */
angular.module('myApp',[])
    .controller('signUpCtrl',function($scope){
        var oSucTips = document.getElementsByClassName('alert-success')[0],
            oErrTips = document.getElementsByClassName('alert-danger')[0];

        $scope.userdata = {}
        $scope.submitForm = function(){
            if($scope.signUpForm.$valid){
                oErrTips.setAttribute('hidden','hidden');
                oSucTips.removeAttribute('hidden');
            }else{
                oSucTips.setAttribute('hidden','hidden');
                oErrTips.removeAttribute('hidden');
            }
        }
    })
    .directive('compare',function(){
        //自定义指令compare,用于比较密码跟确认密码的值
        var o = {};
        o.scope = {
            orgVal : '=compare'
        };
        //A:attribute ,E:element
        o.strict = "AE";
        o.require = 'ngModel';
        o.link = function(sco,ele,attrs,ngModelController){
            //给$validators添加compare指令
            ngModelController.$validators.compare = function(modelVal){
                //modelVal 为确认密码的值
                return modelVal == sco.orgVal;
            }
            sco.$watch('orgVal',function(){
                //监听orgVal,若有改动则进行比较
                ngModelController.$validate();
            });
        }
        return o;
    })

如有需要,如何使用AngularJS进行表单验证demo代码

用户评论