AngularJS表單驗(yàn)證中級(jí)篇(3)
目錄
基本驗(yàn)證
驗(yàn)證插件messages
自定義驗(yàn)證
基本驗(yàn)證
<form name="form" novalidate ng-app>
<span>{{form.$invalid}}</span>
<span>{{form.$valid}}</span>
<span>{{form.$dirty}}</span>
<span>{{form.$pristine}}</span>
<input type="text" ng-model="user" required />
<input type="text" ng-model="pwd" required minlength="4" ng-maxlength="5" />
<input type="text" ng-model="phone" required ng-pattern="/1[3|5|7|8|][0-9]{9}/" />
<input type="email" ng-model="email" required />
<input type="url" ng-model="url" required />
<input type="number" ng-model="number" required />
<div>
<button type="reset" ng-disabled="form.$pristine">重置</button>
<button type="submit" ng-disabled="form.$invalid">提交</button>
</div>
</form>
以上展示了基本的ng驗(yàn)證.
這里重點(diǎn)介紹一下上面的特例:
novalidate:禁用H5自帶的驗(yàn)證
ng-maxlength: 如果不寫(xiě)ng,maxlength則直接限制最多輸入字符,稍微有點(diǎn)區(qū)別(IE9 + Chrome 測(cè)試)
ng-pattern:通過(guò)正則驗(yàn)證,如果不寫(xiě)ng開(kāi)頭,無(wú)驗(yàn)證效果.
注:要啟用驗(yàn)證 同時(shí)需要綁定一個(gè)ng-model

訪問(wèn)表單屬性
---方位表單: <form name>.<angular property>
---訪問(wèn)一個(gè)輸入框: <form name>.<input name>.<angular property>
驗(yàn)證插件
在介紹messages插件之前,我們看下本來(lái)的驗(yàn)證提示
<form name="form" ng-app novalidate>
<span>{{form.user.$error.required?'user該項(xiàng)必填':''}}</span>
<input type="text" ng-model="user" name="user" required />
<span>{{form.pwd.$error.required?'pwd該項(xiàng)必填':''}}</span>
<input type="text" ng-model="pwd" name="pwd" required />
<span>{{form.info.$error.required?'info該項(xiàng)必填':''}}</span>
<input type="text" ng-model="info" name="info" required />
<span>{{form.age.$error.required?'age該項(xiàng)必填':''}}</span>
<input type="text" ng-model="age" name="age" required />
<div>
<button type="submit" ng-disabled="form.$invalid">提交</button>
</div>
</form>

這里只是判斷了require 當(dāng)我們的代碼 我們重復(fù)寫(xiě)了很多3元表達(dá)式
messages插件就是更友好的解決重復(fù)的問(wèn)題
<form name="form" ng-app="myApp" novalidate>
<input type="email" ng-model="user" name="username" required minlength="4" />
<div ng-messages="form.username.$error" ng-messages-multiple>
<div ng-message="required">該項(xiàng)必填</div>
<div ng-message="minlength">低于最低長(zhǎng)度</div>
<div ng-message="email">應(yīng)為email</div>
</div>
</form>
<script src="Scripts/angular.min.js"></script>
<script src="Scripts/angular-messages.min.js"></script>
<script>
angular.module('myApp', ['ngMessages']);
</script>
Nuget:Install-Package AngularJS.Messages
自定義驗(yàn)證
通過(guò)基本的驗(yàn)證方式,我們已經(jīng)能夠解決大部分的驗(yàn)證問(wèn)題.但項(xiàng)目中永遠(yuǎn)充滿(mǎn)著各種各樣的需求.
在ng中的自定義驗(yàn)證,一般通過(guò)指令的形式創(chuàng)建.
<form name="form" ng-app="myApp" novalidate>
<input type="email" ng-model="user" name="username" required ensure-unique minlength="4" />
<div ng-messages="form.username.$error" ng-messages-multiple>
<div ng-message="required">該項(xiàng)必填</div>
<div ng-message="minlength">低于最低長(zhǎng)度</div>
<div ng-message="email">應(yīng)為email</div>
<div ng-message="unique">用戶(hù)名已存在</div>
</div>
</form>
在上面的messages插件Demo中,新建一行驗(yàn)證用戶(hù)名已存在 以及 在input上添加了ensure-unique指令
同時(shí),我們需要在js中定義ensure-unique指令:
angular.module('myApp', ['ngMessages']).directive('ensureUnique', ['$http', '$timeout', '$window', function ($http, $timeout, $window) {
return {
restrict: "A",
require: 'ngModel',
link: function (scope, ele, attrs, ngModelController) {
scope.$watch(attrs.ngModel, function (n) {
if (!n) return;
$timeout.cancel($window.timer);
$window.timer = $timeout(function () {
$http({
method: 'get',
url: '/api/checkusername/', //根據(jù)換成自己的url
params: {
"username": n
}
}).success(function (data) {
ngModelController.$setValidity('unique', data.isUnique); //這個(gè)取決于你返回的,其實(shí)就是返回一個(gè)是否正確的字段,具體的這塊可以自己修改根據(jù)自己的項(xiàng)目
}).error(function (data) {
ngModelController.$setValidity('unique', false);
});
}, 500);
});
}
};
}]);
指令不是本節(jié)重點(diǎn)內(nèi)容,這里簡(jiǎn)單說(shuō)下
ngModelController.$setValidity('unique', bool);
通過(guò)該API可以設(shè)置$error.unique.
setValidity為true,則$error.unique為false
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- AngularJS 與Bootstrap實(shí)現(xiàn)表格分頁(yè)實(shí)例代碼
- Angularjs手動(dòng)解析表達(dá)式($parse)
- Angularjs 創(chuàng)建可復(fù)用組件實(shí)例代碼
- AngularJS 2.0入門(mén)權(quán)威指南
- Angularjs實(shí)現(xiàn)帶查找篩選功能的select下拉框示例代碼
- Angular 中 select指令用法詳解
- angular基于路由控制ui-router實(shí)現(xiàn)系統(tǒng)權(quán)限控制
- AngularJS實(shí)現(xiàn)星星等級(jí)評(píng)分功能
- angular.js之路由的選擇方法
- Angular2 NgModule 模塊詳解
相關(guān)文章
Angular2實(shí)現(xiàn)組件交互的方法分析
這篇文章主要介紹了Angular2實(shí)現(xiàn)組件交互的方法,結(jié)合實(shí)例形式總結(jié)分析了Angular2中組件交互的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-12-12
詳解angular2實(shí)現(xiàn)ng2-router 路由和嵌套路由
本篇文章主要介紹了詳解angular2實(shí)現(xiàn)ng2-router 路由和嵌套路由,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
解決Angular.js中使用Swiper插件不能滑動(dòng)的問(wèn)題
下面小編就為大家分享一篇解決Angular.js中使用Swiper插件不能滑動(dòng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
AngularJS使用ng-options指令實(shí)現(xiàn)下拉框
這篇文章主要介紹了AngularJS使用ng-options指令實(shí)現(xiàn)下拉框效果,ng-option指令使用也很簡(jiǎn)單,下文具體給大家說(shuō)明,對(duì)angularjs 下拉框知識(shí)感興趣的朋友一起看下吧2016-08-08
測(cè)試IE瀏覽器對(duì)JavaScript的AngularJS的兼容性
這篇文章主要介紹了測(cè)試IE瀏覽器對(duì)JavaScript的AngularJS的兼容性的方法,盡管隨著Windows10的近期上市,IE瀏覽器即將成為歷史...需要的朋友可以參考下2015-06-06
Angular2學(xué)習(xí)教程之ng中變更檢測(cè)問(wèn)題詳解
這篇文章主要給大家介紹了Angular2學(xué)習(xí)教程之ng中變更檢測(cè)問(wèn)題的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
AngularJS基礎(chǔ) ng-keydown 指令簡(jiǎn)單示例
本文主要介紹AngularJS ng-keydown 指令,在這里幫大家整理了ng-keydown 指令的基礎(chǔ)資料,并附有代碼,有需要的朋友可以參考下2016-08-08
詳解angularJs中關(guān)于ng-class的三種使用方式說(shuō)明
本篇文章主要介紹了angularJs中關(guān)于ng-class的三種使用方式說(shuō)明,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

