angularJs 表单验证

之前没事学习了一下angularjs的表单验证,在这里记录一下。

使用angularJs表单控件属性进行验证

在angularjs中表单被封装了,在给表单起名字之后就能看到表单的许多属性.

《angularJs 表单验证》

《angularJs 表单验证》
这些属性时用来方便给我们验证的,可以通过这些属性来显示我们的错误信息。

添加一个表单的控件,为它绑定上ng-model 和 添加名字后,就可以看到它的属性:

《angularJs 表单验证》

《angularJs 表单验证》

$dirty表示用户是否修改过控件的值,$touched表示用户是否触碰过控件,valid代表控件是否通过了验证,$error代表验证的错误.
首先添加一个angularjs内置的验证required,他表示该字段必须填写,否则就会出错:

《angularJs 表单验证》

添加了这个验证后,明显的发现了$error对象增加了一个属性required,这是因为我们加入了必填的验证,但是data.name的值却没有,所以就有了required的错误,并且字段的验证是不通过的,$valid 属性为false

《angularJs 表单验证》

当输入一个2时,$error的属性消失了,由于通过了验证,所以$valid属性也变成了true,同时$dirty变成了true,$touched在这里也变成了true,但他们是不一样的(后边会说明).

《angularJs 表单验证》

由此我们可以通过验证来显示我们的错误信息,当$error.required为true时,就代表这个字段的值是空的,此时我们显示错误的信息,提示用户填写字段,用ng-show来实现.

《angularJs 表单验证》

《angularJs 表单验证》

问题是用户还没有输入我们就显示了错误的信息,这样是不对的,这时候就可以用$dirty和$touched来帮助验证了,只有在用户与控件交互过,并且验证还不通过的时候,我们才显示我们的错误信息.这两个不同之处在于:

《angularJs 表单验证》

当我们输入一个1,$dirty立即就为true了,但$touched此时还是false,他是在你把鼠标点击别处的时候他才会变成true,就是说你的控件值一改变,$dirty立即为true,当你第一次转移这个控件的焦点时,$touched才变成true.根据个人的需要使用这两个属性.

《angularJs 表单验证》
未输入:

《angularJs 表单验证》

输入1:
《angularJs 表单验证》

删掉1:
《angularJs 表单验证》

当控件通过验证时,他的$valid才为true,因此我们可以通过这个显示通过验证的信息:

《angularJs 表单验证》

《angularJs 表单验证》

使用自定义的验证

有时候angularjs内置的验证不够用的时候,就得我们自己自定义验证了,自定义的验证分为同步验证和异步的验证.

同步验证

在绑定了ng-model指令后,就可以使用ng-model的api来增加我们自定义的验证.

《angularJs 表单验证》
这里增加require属性绑定ng-model后,在link里就可以用第四个参数,就是ng-model指令的控制器,可以使用angularjs ng-model指令暴露的方法来给ng-model的值增加验证器,当ng-mdel视图的值改变时,他会调用验证器,此时就会调用我们的验证.
同步验证的添加方法:

在c.$validators对象上添加方法,这个方法就是我们要验证的方法,他能接受两个参数,一个是模型的值,一个是视图的值,每当视图的值改变时,他都会调用$validators上所有的方法,也会调用我们定义的验证方法,在判断中,如果return true就代表通过验证,return false 代表失败验证,失败时$error就会出现方法名称的错误(这里是xxx : true).

《angularJs 表单验证》

异步验证

异步验证的方法是用c.$asyncValidators对象上添加方法,他同样接受两个参数,一个modelValue和viewValue。不同之处是他不能返回false或true,他返回的是一个promise.

《angularJs 表单验证》

$q是angularjs的服务,注入就行了,在这里返回一个promise对象,他在请求成功时,把promise状态设置为成功,请求失败设置为失败,当失败时,$error里也会出现同名的错误.可以根据异步结果的情况来设置promise的状态,从而达到验证效果.

《angularJs 表单验证》

《angularJs 表单验证》
这个是验证与后台数据重复命名(后台数据有33这个名字),当输入3时没有错,输入33时产生验证的错误信息.可以通过错误信息来显示我们的提示信息.从而达到验证的效果.

《angularJs 表单验证》

    原文作者:鲸冬香
    原文地址: https://segmentfault.com/a/1190000016807866
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞