AngularJS 表单验证

angularjs中的form表单元素并非普通的表单元素, 他们都属于controller的实例,拥有一些属性和方法.

form表单实例都是通过name属性来进行标识,所以 form和input都需要加name属性.

<form name="myform">
    <input type="text" name="telephone" placeholder="请输入电话好吗" maxlength="11"
        ng-model="personalInfo.telephone" required  
        ng-maxlength="11" ng-pattern="/^\d{11}$/">
    {{myform.telephone.$valid}}
</form>

form提供的属性都是用来表示表单的验证状态的,
包括:

$pristine      //表单或输入框没有使用
$dirty     //表单或输入框有填写记录
$valid     //表单或输入框,基于你设定的规则是否验证通过
$invalid   //表单或输入框,基于你设定的规则是否验证未通过
$error     //验证错误信息

前4个属性在js中使用方法:

if($scope.myform.$pristine){
    alert(请填写表单);
    return;
}
if($scope.myform.telephone.$invalid){
    alert(请输入正确的电话号码);
    return;
}
if($scope.myform.telephone.$valid){
    alert(祝贺你,电话号码正确);
    return;
}

errortruefalse error的值为一个js对象,包含了以下验证内容的状态:

min
max
minlength
maxlength
pattern
required
email
number
url

js中error使用方式

if($scope.myform.telephone.$error.required){
    alert(请输入电话号码);
    return;
}
if($scope.myform.telephone.$error.maxlength || $scope.myform.telephone.$error.minlength){
    alert(电话号码位数错误);
    return;
}

一个表单中的表单元素,会作为这个form的属性自动加在上面,
所以访问页面表单的属性, 模式如下:

<form name>.<angular property> //form
<form name>.<input name>.<angular property>  //表单元素

表单元素必须有ng-model,否则无法触发验证.

angularjs在渲染 表单的一些ng标签的时候, 会把它附加 class上.
例如: class=”ng-pristine ng-validng-invalid ng-dirty”

我们在实际项目中可以通过定义这些class来设置css.

input.ng-pristine {
    background-color: white;
}
input.ng-dirty {
    background-color: lightyellow;
}
input.ng-valid {
    background-color: lightgreen;
}
input.ng-invalid {
    background-color: pink;
}

常用 场景

    <!-- NAME -->
    <div class="form-group">
        <label>Name</label>
        <input type="text" name="name" class="form-control" ng-model="name" required>
        <p ng-show="userForm.name.$invalid && !userForm.name.$pristine" class="help-block">
            姓名是必填的.
        </p>
    </div>

    <!-- USERNAME -->
    <div class="form-group">
        <label>Username</label>
        <input type="text" name="username" class="form-control" 
            ng-model="user.username" ng-minlength="3" ng-maxlength="8">
        <p ng-show="userForm.username.$error.minlength" class="help-block">用户名太短.</p>
        <p ng-show="userForm.username.$error.maxlength" class="help-block">用户名太长.</p>
    </div>

    <!-- EMAIL -->
    <div class="form-group">
        <label>Email</label>
        <input type="email" name="email" class="form-control" ng-model="email">
        <p ng-show="userForm.email.$invalid && !userForm.email.$pristine" class="help-block">
            请填入一个有效的email.
        </p>
    </div>
    <!-- 提交按钮 -->
    <button type="submit" class="btn btn-primary" ng-disabled="userForm.$invalid">Submit</button>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值