詳解AngularJS中的表單驗證(推薦)
AngularJS自帶了很多驗證,什么必填,最大長度,最小長度...,這里記錄幾個有用的正則式驗證
1.使用angularjs的表單驗證
正則式驗證
只需要配置一個正則式,很方便的完成驗證,理論上所有的驗證都可以用正則式完成
//javascript $scope.mobileRegx = "^1(3[0-9]|4[57]|5[0-35-9]|7[01678]|8[0-9])\\d{8}$"; $scope.emailRegx = "^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$"; $scope.pwdRegx = "[a-zA-Z0-9]*"; <div class="form-group"> <input class="form-control" name="mobile" type="text" ng-model="account.mobile" required ng-pattern="mobileRegx"/> <span class="error" ng-show="registerForm.$submitted && registerForm.mobile.$error.required">*手機(jī)號不能為空</span> <span class="error" ng-show="registerForm.$submitted && registerForm.mobile.$error.pattern">*手機(jī)號地址不合法</span> </div> <input type="text" ng-pattern="/[a-zA-Z]/" />
數(shù)字
設(shè)置input的type=number即可
<div class="form-group col-md-6"> <label for="password"> 預(yù)估時間 </label> <div class="input-group"> <input required type="number" class="form-control" ng-model="task.estimated_time" name="time" /> <span class="input-group-addon">分鐘</span> </div> <span class="error" ng-show="newTaskForm.$submitted && newTaskForm.time.$error.required">*請預(yù)估時間</span> </div>
郵箱
<input type="email" name="email" ng-model="user.email" />
URL
<input type="url" name="homepage" ng-model="user.facebook_url" />
效果
效果是實時的,很帶感
2.使用ngMessages驗證表單
相對于上面的每個驗證都要自己寫代碼判斷,ngMessages提供了一種更為簡潔的方式
https://docs.angularjs.org/api/ngMessages/directive/ngMessages
angular.module('ngMessagesExample', ['ngMessages']); <form name="myForm"> <label> Enter your name: <input type="text" name="myName" ng-model="name" ng-minlength="5" ng-maxlength="20" required /> </label> <pre>myForm.myName.$error = {{ myForm.myName.$error | json }}</pre> <!--需要配合 ng-if使用,否則一開始就顯示出來了, 你摸了就會觸發(fā)驗證--> <div ng-messages="myForm.myName.$error" style="color:maroon" role="alert" ng-if="myForm.myName.$touched"> <div ng-message="required">You did not enter a field</div> <div ng-message="minlength">Your field is too short</div> <div ng-message="maxlength">Your field is too long</div> </div> </form>
簡直是第二次解放啊。。。
2.動態(tài)生成的表單的驗證
如果你有一部分form的內(nèi)容是動態(tài)生成的,數(shù)量和名字都不確定的時候,該如何驗證這些生成的元素呢?其實維護(hù)一個動態(tài)的form本來就是個問題。但是在angular中,只需要記住一點:準(zhǔn)備好你的數(shù)據(jù),其他的交給angular。像下面這個例子,你只需要維護(hù)好一個數(shù)組,然后利用ng-repeat就可以快速的呈現(xiàn)到頁面上。
其實動態(tài)的form和一般的form驗證都是一致的,只是動態(tài)的form需要使用myForm[inout_name].$error的形式訪問
<!-- 動態(tài)顯示狀態(tài)的負(fù)責(zé)人 --> <div class="form-group col-md-6" ng-repeat="sta in task.status_table | orderBy : sta.sequence_order"> <label>{{sta.status_name}} 負(fù)責(zé)人</label> <select required class="form-control" ng-model="sta.user_id" ng-options="qa.id as qa.last_name+' '+qa.last_name for qa in taskUserList" name="{{sta.status_name}}"> </select> <div ng-messages="newTaskForm[sta.status_name].$error" ng-if="newTaskForm.$submitted || newTaskForm[sta.status_name].$touched"> <p class="error" ng-message="required">*請選擇負(fù)責(zé)人</p> </div> </div>
3. 必填項加亮顯
有些表單我們不希望粗暴的在下面添加文字信息提示驗證,而是希望更簡潔的方式,如:加亮邊框,突出顯示
需要做的只是在required驗證沒通過的時候添加class,改變元素的樣式即可
<form name="loginForm" novalidate ng-submit="loginPost()" class="navbar-form navbar-right" ng-hide="login"> <fake-autocomplete></fake-autocomplete> <div class="form-group"> <input name="user_name" required maxlength="50" type="text" class="form-control" placeholder="手機(jī)號或郵箱" ng-model="account.user_name" ng-class="{warn:loginForm.$submitted && loginForm.user_name.$error.required}"> </div> <div class="form-group"> <input name="password" required type="password" maxlength="50" placeholder="密碼" ng-model="account.password" ng-class="{'form-control':1,warn:loginForm.$submitted && loginForm.password.$error.required}"> </div> <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-lock"></span> 登錄</button> </form> .warn { border-color: #f78d8d !important; outline: 0 !important; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgb(239, 154, 154) !important; box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(239, 154, 154) !important; }
以上所述是小編給大家介紹的詳解AngularJS中的表單驗證,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Angular 4環(huán)境準(zhǔn)備與Angular cli創(chuàng)建項目詳解
Angular4.0來了,更小,更快,改動少,所以下面這篇文章主要給大家介紹了關(guān)于Angular 4環(huán)境準(zhǔn)備與學(xué)會使用Angular cli創(chuàng)建項目的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面來一起看看吧。2017-05-05Angular實現(xiàn)的table表格排序功能完整示例
這篇文章主要介紹了Angular實現(xiàn)的table表格排序功能,結(jié)合完整實例形式分析了AngularJS表格排序所涉及的事件響應(yīng)、元素遍歷、屬性修改等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12AngularJs用戶登錄問題處理(交互及驗證、阻止FQ處理)
這篇文章主要為大家詳細(xì)介紹了AngularJs用戶登錄問題處理,包括交互及驗證、阻止FQ處理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10AngularJS使用帶屬性值的ng-app指令實現(xiàn)自定義模塊自動加載的方法
這篇文章主要介紹了AngularJS使用帶屬性值的ng-app指令實現(xiàn)自定義模塊自動加載的方法,結(jié)合實例形式分析了ng-app自動加載我們自定義的模塊作為根模塊的操作步驟與實現(xiàn)技巧,需要的朋友可以參考下2017-01-01Angular客戶端請求Rest服務(wù)跨域問題的解決方法
本篇文章主要介紹了Angular客戶端請求Rest服務(wù)跨域問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09