Angularjs使用指令做表單校驗(yàn)的方法
前言
通常,使用angular做表單驗(yàn)證,一般都是把驗(yàn)證規(guī)則單獨(dú)寫為service,然后通過依賴注入的方式調(diào)用。在個(gè)別情況下,例如用戶注冊(cè)表單,需要根據(jù)用戶輸入給出不同提示信息,使用service略顯不合適宜,所以可以采用指令的方式。
簡(jiǎn)易表單
如下為一個(gè)簡(jiǎn)易表單,有四項(xiàng)提示信息,依據(jù)狀態(tài)呈現(xiàn)。校驗(yàn)規(guī)則為數(shù)字,大寫字母,小寫字母至少出現(xiàn)兩項(xiàng),通過正則配合ng-pattern能夠?qū)崿F(xiàn)相同的效果,此處僅為引入指令校驗(yàn),不做深究。其中,user-validator為自定義指令。
<form class="form-horizontal" name="form" role="form" ng-controller="ValidCtrl"> <div class="form-group"> <label for="user" class="col-sm-2 control-label" >用戶名</label> <div class="col-sm-5"> <input type="text" ng-model="user" name="user" id="user" user-validator class="form-control" required="required"> </div> <label class="col-sm-5" ng-show="form.user.$pristine">請(qǐng)輸入用戶名</label> <label class="col-sm-5" ng-show="form.user.$error.required && form.user.$dirty"> 用戶名不能為空 </label> <label class="col-sm-5" ng-show="form.user.$error.defined && form.user.$dirty"> 用戶名不符合規(guī)則 </label> <label class="col-sm-5" ng-show="form.user.$valid && form.user.$dirty"> 用戶名有效 </label> </div> </form>
校驗(yàn)指令
校驗(yàn)指令代碼如下:
angular.module('shuffleApp', [])
.directive('userValidator', ['$log', function($log) {
return {
restrict: 'A',
require: 'ngModel',
link: function($scope, $element, $attrs, $ngModelCtrl) {
var verifyRule = [/^\d+$/, /^[a-z]+$/, /^[A-Z]+$/];
var verify = function(input) {
return !(verifyRule[0].test(input) ||
verifyRule[1].test(input) ||
verifyRule[2].test(input));
};
$ngModelCtrl.$parsers.push(function(input) {
var validity = verify(input);
$ngModelCtrl.$setValidity('defined', validity);
return validity ? input : false;
});
$ngModelCtrl.$formatters.push(function(input) {
var validity = verify(input);
$ngModelCtrl.$setValidity('defined', validity);
return validity ? input : false;
})
}
}
}]);
指令內(nèi)容非常簡(jiǎn)單,檢測(cè)是否全為數(shù)字,小寫字母,大寫字母,然后取反即得到校驗(yàn)結(jié)果。然后在$parser, $formatter內(nèi)部設(shè)置校驗(yàn)結(jié)果即可。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js前端設(shè)計(jì)模式優(yōu)化50%表單校驗(yàn)代碼示例
- js實(shí)現(xiàn)表單校驗(yàn)功能
- 從表單校驗(yàn)看JavaScript策略模式的使用詳解
- Vue.js + Nuxt.js 項(xiàng)目中使用 Vee-validate 表單校驗(yàn)
- JavaScript 完成注冊(cè)頁(yè)面表單校驗(yàn)的實(shí)例
- 使用JavaScript進(jìn)行表單校驗(yàn)功能
- AngularJs表單校驗(yàn)功能實(shí)例代碼
- AngularJS入門教程之表單校驗(yàn)用法示例
- Vue.js 表單校驗(yàn)插件
- JS實(shí)現(xiàn)注冊(cè)界面表單校驗(yàn)
相關(guān)文章
整理AngularJS框架使用過程當(dāng)中的一些性能優(yōu)化要點(diǎn)
這篇文章主要介紹了AngularJS框架使用過程當(dāng)中的一些性能優(yōu)化要點(diǎn),Angular通常被用來制作大型單頁(yè)應(yīng)用,因而性能問題也是必須考慮的因素,需要的朋友可以參考下2016-03-03
AngularJS select設(shè)置默認(rèn)值的實(shí)現(xiàn)方法
這篇文章主要介紹了AngularJS select設(shè)置默認(rèn)值的實(shí)現(xiàn)方法的相關(guān)資料,這里提供實(shí)現(xiàn)方法幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08
詳解Angularjs 如何自定義Img的ng-load 事件
本篇文章主要介紹了詳解Angularjs 如何自定義Img的ng-load 事件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
從源碼看angular/material2 中 dialog模塊的實(shí)現(xiàn)方法
這篇文章主要介紹了 從源碼看angular/material2 中 dialog模塊的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-10-10
angularjs ocLazyLoad分步加載js文件實(shí)例
本篇文章主要介紹了angularjs ocLazyLoad分步加載js文件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
AngularJS 實(shí)現(xiàn)按需異步加載實(shí)例代碼
這篇文章主要介紹了AngularJS 實(shí)現(xiàn)按需異步加載實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2015-10-10
利用Angular.js限制textarea輸入的字?jǐn)?shù)
相信在大家已經(jīng)學(xué)習(xí)了足夠多關(guān)于AngularJS的知識(shí)后,就可以開始創(chuàng)建第一個(gè)AngularJS應(yīng)用程序,這篇文章通過示例給大家介紹如何利用Angular.js限制textarea輸入的字?jǐn)?shù),有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10

