AngularJS表單驗(yàn)證功能分析
本文實(shí)例講述了AngularJS表單驗(yàn)證功能。分享給大家供大家參考,具體如下:
在AngularJS的管轄下,每個(gè)表單form都會(huì)創(chuàng)建一個(gè)ngFormController的一個(gè)實(shí)例。在表單里面的每個(gè)input都會(huì)創(chuàng)建一個(gè)在這個(gè)實(shí)例下的ngModelController實(shí)例,用以控制每個(gè)input的行為。
首先先從簡(jiǎn)單的驗(yàn)證開(kāi)始。
AngularJs的ngModelController提供了幾種屬性:$pristine
;$dirty
;$valid
;$invalid
;$error
pristine
:表單并沒(méi)有改變。
dirty
:表單改變了。
valid
:全部控件符合驗(yàn)證規(guī)則。
invalid
:至少有一個(gè)控件不符合驗(yàn)證規(guī)則。
error
:有錯(cuò),但是不知道什么錯(cuò)。
創(chuàng)建一個(gè)表單如下:
<form name="userForm" method="#" action="#"> <label for="name">用戶名1</label> <input id="name" name="name" type="text" ng-model="users.name" pattern="^\w{6,18}$" required> <span ng-show="userForm.name.$error.pattern">用戶名必須XXXX</span> </form>
首先每個(gè)form都要有自己的name。通過(guò)這個(gè)name來(lái)對(duì)自己下面的input進(jìn)行控制。而后,每個(gè)input標(biāo)簽都要有自己的name。name是很關(guān)鍵的一步,被用于識(shí)別每個(gè)不同的input,從而識(shí)別不同的ngModelController。使用pattern來(lái)設(shè)置自己的正則表達(dá)式規(guī)則。使用$error來(lái)檢測(cè)這個(gè)正則表達(dá)式是否正確。并把它賦予給ng-show指令。如果有錯(cuò),整個(gè)$error 就會(huì)返回true,顯示設(shè)置好的提示信息,一直到正則表達(dá)式通過(guò),$error返回false,ng-show 對(duì)其進(jìn)行隱藏。
以上的簡(jiǎn)單例子是沒(méi)有自己去重新設(shè)置控制器的行為,一切都是AngularJs默認(rèn)的??梢钥吹絥g-show里面的判斷代碼其實(shí)是可以交給后面的JS完成的,這樣可以看到ngModelController的具體過(guò)程。
<!--html--> <form name="userForm" ng-controller="main" method="#" action="#"> <label for="name">用戶名1</label> <input id="name" name="name" type="text" ng-model="users.name" pattern="^\w{6,18}$" required> <span style="color:red" ng-show="showError(userForm.name,'pattern')">用戶名必須XX</span> <span style="color:green" ng-show="showSuccess(userForm.name)">成功!</span> <!--對(duì)按鈕進(jìn)行動(dòng)態(tài)鎖定--> <button class="btn btn-primary btn-lg" ng-disabled="submit(userForm)">SAVE</button> </form>
/*JS*/ app.controller("main",function($scope){ $scope.showError=function(ngModelController,abc){ return ngModelController.$error[abc]; }; $scope.showSuccess=function(ngModelController){ return ngModelController.$valid; /*至少有1錯(cuò)誤,返回false,無(wú)錯(cuò)誤,返回true*/ }; $scope.submit=function(ngFormController){ return ngFormController.$invalid; /*valid的取反*/ }; });
這里直接在控制器里面的ngModelController里進(jìn)行判斷。里面有一個(gè)坑,就是判斷$valid 等等這類屬性是沒(méi)有帶參數(shù)的。而判斷$error 則需要表明“判斷什么”,我傳了自己的一個(gè)正則表達(dá)式給他。
AngularJs還可以對(duì)表單的提交按鈕進(jìn)行“鎖定”。但要注意的是,此時(shí)BUTTON對(duì)應(yīng)的Controller不再是針對(duì)某一個(gè)input的ngModelController,而是針對(duì)整個(gè)form的ngFormController了,因此,里面的$invalid 是判斷所有的input有沒(méi)有問(wèn)題,全部都沒(méi)問(wèn)題的時(shí)候才會(huì)解鎖。
思考:正則表達(dá)式或者minlength類似這種限制,能否寫在JS文件里面。
更多關(guān)于AngularJS相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《AngularJS指令操作技巧總結(jié)》、《AngularJS入門與進(jìn)階教程》及《AngularJS MVC架構(gòu)總結(jié)》
希望本文所述對(duì)大家AngularJS程序設(shè)計(jì)有所幫助。
- AngularJS實(shí)現(xiàn)表單驗(yàn)證
- AngularJS使用ngMessages進(jìn)行表單驗(yàn)證
- AngularJS中實(shí)現(xiàn)用戶訪問(wèn)的身份認(rèn)證和表單驗(yàn)證功能
- AngularJS使用angular-formly進(jìn)行表單驗(yàn)證
- AngularJS手動(dòng)表單驗(yàn)證
- AngularJS自動(dòng)表單驗(yàn)證
- 基于angularJS的表單驗(yàn)證指令介紹
- AngularJS實(shí)現(xiàn)表單驗(yàn)證功能
- 基于AngularJS實(shí)現(xiàn)表單驗(yàn)證功能
- AngularJS學(xué)習(xí)筆記之表單驗(yàn)證功能實(shí)例詳解
- AngularJS實(shí)現(xiàn)的獲取焦點(diǎn)及失去焦點(diǎn)時(shí)的表單驗(yàn)證功能示例
相關(guān)文章
Angularjs實(shí)現(xiàn)多個(gè)頁(yè)面共享數(shù)據(jù)的方式
本文給大家介紹使用Angularjs實(shí)現(xiàn)多個(gè)頁(yè)面共享數(shù)據(jù)的方式,通過(guò)定義一個(gè)共享服務(wù)service來(lái)實(shí)現(xiàn)此功能,對(duì)angularjs共享數(shù)據(jù)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)2016-03-03angular4響應(yīng)式表單與校驗(yàn)實(shí)現(xiàn)demo
這篇文章主要介紹了angular4響應(yīng)式表單與校驗(yàn)實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05AngularJS入門教程之?dāng)?shù)據(jù)綁定原理詳解
這篇文章主要介紹了AngularJS數(shù)據(jù)綁定原理,較為詳細(xì)的分析了AngularJS數(shù)據(jù)綁定的原理、使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-11-11Angular應(yīng)用里異步打開(kāi)對(duì)話框技術(shù)詳解
這篇文章主要為大家介紹了Angular應(yīng)用里異步打開(kāi)對(duì)話框技術(shù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12angularjs ocLazyLoad分步加載js文件實(shí)例
本篇文章主要介紹了angularjs ocLazyLoad分步加載js文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01Angular實(shí)現(xiàn)點(diǎn)擊按鈕控制隱藏和顯示功能示例
這篇文章主要介紹了Angular實(shí)現(xiàn)點(diǎn)擊按鈕控制隱藏和顯示功能,結(jié)合實(shí)例形式分析了AngularJS簡(jiǎn)單控制頁(yè)面元素顯示與隱藏的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Angular自定義組件實(shí)現(xiàn)數(shù)據(jù)雙向數(shù)據(jù)綁定的實(shí)例
下面小編就為大家分享一篇Angular自定義組件實(shí)現(xiàn)數(shù)據(jù)雙向數(shù)據(jù)綁定的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12詳解使用KeyValueDiffers檢測(cè)Angular對(duì)象的變化
這篇文章主要為大家介紹了KeyValueDiffers檢測(cè)Angular對(duì)象的變化使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04