我有一個註冊表單,我想對已經在數據庫中註冊的電子郵件進行實時輸入驗證。AngularJS - 使用指令設置輸入表單的錯誤CSS類
我有指令工作,所以它會觸發輸入框的每一個變化,但我很難讓Angular從範圍內設置合適的.error
CSS類。
這裏是我的標記:
<form ng-app="mainApp" id="signup_form" name="signup_form" ng-controller="signupController" ng-submit="submit()" novalidate >
<fieldset>
<legend>Create New Account</legend>
<div class="control-group" ng-class="{ error: signup_form.username.$invalid }">
<label class="control-label" for="username">Username</label>
<div class="controls">
<input type="text" placeholder="Username" name="username"
ng-model="username"
ng-minlength=3
ng-maxlength=20 required />
</div>
</div>
<div class="control-group" ng-class="{ error: signup_form.email.$invalid}">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input type="text" placeholder="Email" name="email"
ng-model="email"
required
uniqueaddress/>
</div>
</div>
<ul>
<li ng-show="signup_form.$error.required" class="error">Field is required.</li>
<li ng-show="signup_form.$error.minlength" class="error">Field must at least 3 characters</li>
<li ng-show="signup_form.$error.maxlength" class="error">Field is too long.</li>
<li ng-show="signup_form.$error.uniqueaddress" class="error">Email is already in use</li>
</ul>
</fieldset>
<button type="submit" ng-disabled="signup_form.$invalid" class="btn">Submit</button>
</form>
通知第二輸入框中輸入指令屬性 'uniqueaddress'。這裏是我的uniqueaddress指令:
mainApp.directive('uniqueaddress', function() {
return {
restrict: 'A',
link: function (scope, element, attrs, ctrl)
{
var isEmailValid = false;
var isEmailValid = scope.$watch(attrs.ngModel, function (email)
{
if(email == 'test')
scope.signup_form.$setValidity('uniqueaddress', false);
else
scope.signup_form.$setValidity('uniqueaddress', true);
});
}
};
});
這裏是demonstarting問題的小提琴: http://jsfiddle.net/k4Cty/10/
Type在任何3個字符串和驗證工作正常用戶名字段。對於電子郵件字段,如果您輸入字符串'test',驗證會觸發並且出現標記爲ng-show="signup_form.$error.uniqueaddress"
的<li>
項目,但.error
類未設置爲<div class="control-group">
,因爲它不會變成紅色,表示驗證錯誤。它似乎設置.error
類爲默認ng-minlength
和required
指令正在觸發,但不是uniqueaddress
。我在這裏做錯了什麼?
我是Angular的新手,這是好東西。我還沒有進入$解析器和$格式化器,所以我需要看看這些。我發現的所有教程/博客都使用了某種形式的$ setValidity,所以它讓我相信這是執行驗證的正確方法。感謝您及時的回覆! – Josh