首頁  >  文章  >  php教程  >  Angular表單驗證實例詳解

Angular表單驗證實例詳解

高洛峰
高洛峰原創
2016-12-09 14:53:401075瀏覽

表單驗證

我去,我感覺我這個人其實還是一個很傻逼的一個人,老是因為拼錯了一個單詞或者怎麼樣就浪費我很長時間,這樣真的不行不行,要正確對待這個問題,好了,說正題吧,angular也有表單驗證minlength,maxlength,required呀這些個東西,還有也支持h5的那些驗證,h5的那些驗證,就是type啦,type='email',number,url呀這些,然後現在要用angular來驗證,可以定義樣式哈,不錯,然後怎麼驗證呢,好的上代碼

<!DOCTYPE html>
<html ng-app=&#39;app&#39;>
<head>
<meta charset=&#39;UTF-8&#39;>
<title>form1</title>
<link rel="stylesheet" type="text/css" href="static/plugins/bootstrap.min.css">
<script type="text/javascript" src=&#39;static/plugins/angular.min.js&#39;></script>
<script type="text/javascript" src=&#39;static/plugins/angular-messages.js&#39;></script>
</head>
<body>
<div class="col-md-6">
<form role="form" name="myForm" class="form-horizontal" novalidate>
<label>用户名</label>
<input type="email" placeholder="ng-Messages测试" name="name" ng-model="username.name"
ng-minlength=3 ng-maxlength=20 required />
<div ng-messages="myForm.name.$error">
<div ng-message="required">必填项</div>
<div ng-message="minlength">字符太短小于3</div>
<div ng-message="maxlength">字符太长大于20</div>
<div ng-message=&#39;email&#39;>正确的邮箱格式</div>
</div>
</form>
</div>
</body>
<script type="text/javascript">
angular.module("app", [&#39;ngMessages&#39;]);
</script>
</html>

   

這樣就可以了,有幾點要聲明一下,

 㟎第一就是要引入angular-messages.js,

  第二就是message跟messages一定要看清楚啊,

  第三myForm.name.$error:這個myForm就是form的name值,name就是要驗證的input的第三myForm.name.$error:這個myForm就是form的name值,name就是要驗證的input的第三myForm.name.$error:這個myForm就是form的name值,name就是要驗證的input的第三myForm.name. name值。

  第四就是這個還可以自訂驗證哈。

  恩第五的話明前還沒有,大神們可以看看還有什麼要注意的,歡迎指出。

自訂驗證來說下怎麼搞吧,上程式碼

<input type="text"
placeholder="Desired username"
name="username"
ng-model="signup.username"
ng-minlength=3
ng-maxlength=20
ensure-unique="username" required />

   

你看這個ensure-unique就是自訂的驗證,就是獨一無二唄,這就是在html上的寫法,自訂的js程式碼就是自己寫啦,這裡也有這個對應的程式碼,是用指令寫的,恩上程式碼

angular.module(&#39;myApp&#39;, [])
.directive(&#39;ensureUnique&#39;, [&#39;$http&#39;, function($http) {
return {
require: &#39;ngModel&#39;,
link: function(scope, ele, attrs, c) {
scope.$watch(attrs.ngModel, function() {
$http({
method: &#39;POST&#39;,
url: &#39;/api/check/&#39; + attrs.ensureUnique,
data: {&#39;field&#39;: attrs.ensureUnique}
}).success(function(data, status, headers, cfg) {
c.$setValidity(&#39;unique&#39;, data.isUnique);
}).error(function(data, status, headers, cfg) {
c.$setValidity(&#39;unique&#39;, false);
});
});
}
};
}]);

   

看到沒,html,js兩步完成自訂驗證,就是自訂驗證我感覺有點我有點low啊,搞不太來。反正我貼這兩段程式碼就是告訴你們自訂驗證的寫法是咋樣的,哈哈

恩,還有就是anglar的表單驗證屬性哈,反正上表格吧,一目了然哈,這個都是菜鳥網上有的,你們可以去搜尋搜尋哈

Angular表單驗證實例詳解

然後呢,這個怎麼用呢,好的,上代碼

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body>
<h2>验证实例</h2>
<form ng-app="myApp" ng-controller="validateCtrl"
name="myForm" novalidate>
<p>用户名:<br>
<input type="text" name="user" ng-model="user" required>
<span style="color:red" ng-show="myForm.user.$dirty && myForm.user.$invalid">
<span ng-show="myForm.user.$error.required">用户名是必须的。</span>
</span>
</p>
<p>邮箱:<br>
<input type="email" name="email" ng-model="email" required>
<span style="color:red" ng-show="myForm.email.$dirty && myForm.email.$invalid">
<span ng-show="myForm.email.$error.required">邮箱是必须的。</span>
<span ng-show="myForm.email.$error.email">非法的邮箱地址。</span>
</span>
</p>
<p>
<input type="submit"
ng-disabled="myForm.user.$dirty && myForm.user.$invalid || 
myForm.email.$dirty && myForm.email.$invalid">
</p>
</form>
<script>
var app = angular.module(&#39;myApp&#39;, []);
app.controller(&#39;validateCtrl&#39;, function($scope) {
$scope.user = &#39;John Doe&#39;;
$scope.email = &#39;john.doe@gmail.com&#39;;
});
</script>
</body>
</html>

這個的用法總結幾點,

  1.只要用一個不需要引入別的js,但是缺點是什麼你懂的啦,不能驗證更多的條件啦,嘿嘿,這個看自己需求啦。

  2.就是她是用ng-show來顯示的,這裡的myForm.user.$error.required這些個是怎麼來的,還是跟上面一樣的哈,都是name值,這個就是這樣啦,你看required必填嘛,就對應這個$dirty啦so....myForm.user.$dirty ,哈哈反正這些個代表的意思都在表格裡啦。感覺這種的驗證條件有效,還是那句話,看自己需求吧。

  3.這種用法還有一個問題啊,就是比如說你要先驗證一個required,你要是一開始輸入框上沒內容,他的那個驗證提示是不會出現的,所以你要先js給它預設一個值,我覺得這種效果不好啊。所以你看到頁面上$scope.user = 'John Doe';js給他先賦值了。

  4.還要一個問題,你要先賦值嘛,然後你得搞個控制器啊,又得定義一個控制器,我感覺總結來說我還是覺得第一種方法好點吧。

  5.還有一個問題,你每個Input記得綁定ng-model啊,要不然怎麼監控。個人看法哈,

還有就是這兩種其實也可以結合的,不行可以看程式碼。好的,上程式碼吧

<!DOCTYPE html>
<html ng-app=&#39;app&#39;>
<head>
<meta charset=&#39;UTF-8&#39;>
<title>form1</title>
<link rel="stylesheet" type="text/css" href="static/plugins/bootstrap.min.css">
<script type="text/javascript" src=&#39;static/plugins/angular.min.js&#39;></script>
<script type="text/javascript" src=&#39;static/plugins/angular-messages.js&#39;></script>
</head>
<body ng-controller=&#39;ctrl&#39;>
<div class="col-md-6">
<form role="form" name="myForm" class="form-horizontal" novalidate>
<label>用户名</label>
<input type="email" placeholder="ng-Messages测试" name="name" ng-model="username.name"
ng-minlength=3 ng-maxlength=20 required />
<div ng-messages="myForm.name.$error">
<div ng-message="required">必填项</div>
<div ng-message="minlength">字符太短小于3</div>
<div ng-message="maxlength">字符太长大于20</div>
<div ng-message=&#39;email&#39;>正确的邮箱格式</div>
</div>
名字 <input type=&#39;text&#39; name=&#39;name1&#39; ng-model=&#39;name1&#39; required>
<span style=&#39;color:red&#39; ng-show=&#39;myForm.name1.$dirty&#39;>
<span ng-show=&#39;myForm.name1.$error.required&#39;>名字是必须的</span>
</span>
</form>
</div>
</body>
<script type="text/javascript">
var app=angular.module("app", [&#39;ngMessages&#39;]);
app.controller(&#39;ctrl&#39;,function($scope){
$scope.name1=&#39;wenwen&#39;;
})
</script>
</html>

就是這樣子。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn