AngularJS 사용자 정의 폼 검증 기능 인 스 턴 스 상세 설명
Angular 는 대부분 자주 사용 하 는 HTML 5 폼 컨트롤 의 유형(text,number,url,email,date,radio,checkbox)을 실현 하고 많은 명령 을 검증(required,pattern,minlength,maxlength,min,max)으로 실현 했다.
사용자 정의 명령 에 서 는 ngModelController 의$vaidators 대상 에 인증 방법 을 추가 할 수 있 습 니 다.이 controller 대상 을 얻 기 위해 서 는 requirengModel 명령 이 필요 합 니 다.
$vaidators 대상 의 모든 방법 은 model Value 와 view Value 두 값 을 매개 변수 로 받 습 니 다.바 인 딩 된 인증 방법 이 값(true,false)을 되 돌려 준 후,Angular 는 내부 에서$set Validity 방법 을 호출 합 니 다.인증 은 입력 상자 마다 값 이 바 뀌 거나 모델 의 값 이 바 뀝 니 다.인증 은$parsers 와$formatters 가 성공 적 으로 실 행 된 후에 검증 되 지 않 은 항목 은 ngModelController.$error 의 속성 으로 저 장 됩 니 다.
또한,이 contrller 대상 에$asyncValidators 대상 이 하나 더 있 습 니 다.만약 에 인증 이 비동기 적 이 라면 인증 을 추가 하여 이 대상 에 추가 해 야 합 니 다.예 를 들 어 사용자 가 등록 할 때 핸드폰 번 호 를 입력 해 야 합 니 다.우 리 는 백 엔 드 에서 이 핸드폰 번호 가 등록 되 었 는 지 검증 해 야 합 니 다.이 검증 방법 은 promise 대상 을 반환 해 야 합 니 다.그리고 인증 이 통 과 될 때 지연 대상 의 resolve 를 호출 하고 실패 할 때 reject 를 호출 하 며 완료 되 지 않 은 비동기 인증 은 ngModelController.$pending 에 저 장 됩 니 다.
예 를 들 어(그 중의 user 대상 을 주의 하고 검증 이 통과 되 어야 만 모델 에 값 을 연결 할 수 있 습 니 다):
<form name="register_form" ng-submit="save()">
<div class="form-group">
<label for="phoneNumber">
( ):
</label>
<input type="text" class="form-control" ng-model="user.phoneNumber" id="phoneNumber" name="phoneNumber" required phone>
</div>
<div class="form-group">
<label for="username">
( ):
</label>
<input type="text" class="form-control" ng-model="user.username" id="username" required username>
</div>
<button class="btn btn-block btn-primary" type="submit"> </button>
</form>
<h3> </h3>
<pre>
{{ user | json }}
</pre>
'use strict';
angular.module('app', [])
.directive('phone', function ($q, $http) {
return {
require: 'ngModel',
link: function (scope, ele, attrs, ctrl) {
ctrl.$asyncValidators.phone = function (modelValue, viewValue) {
var d = $q.defer();
$http.get('phone.json')
.success(function (phoneList) {
if (phoneList.indexOf(parseInt(modelValue)) >= 0) {
d.reject();
} else {
d.resolve();
}
});
return d.promise;
}
}
}
})
.directive('username', function ($q, $http) {
return {
require: 'ngModel',
link: function (scope, ele, attrs, ctrl) {
ctrl.$validators.username = function (modelValue, viewValue) {
if (modelValue) {
return modelValue.length > 5 ? true : false;
};
return false;
}
}
}
})
phone.json
[
13758262732,
15658898520,
13628389818,
18976176895,
13518077986
]
효과.다음 완전한 사용자 등록 폼 인증:
html:
<form name="register_form" novalidate>
<div class="form-group">
<label for="username"> :</label>
<!-- ng-pattern="/PATTERN/" -->
<input type="text" id="username" ng-model="user.username" class="form-control" name="username" required ng-pattern="/^[^#]*$/">
<span class="glyphicon glyphicon-ok right" ng-show="register_form.username.$valid"></span>
</div>
<div class="alert alert-danger" ng-show="register_form.username.$error.pattern">
<strong> !</strong>
# 。
</div>
<div class="alert alert-danger" ng-show="register_form.username.$error.required && register_form.username.$touched">
<strong> !</strong>
。
</div>
<div class="form-group">
<label for="_password"> :</label>
<!-- ng-minlength="num" -->
<input type="password" id="_password" ng-model="data._password" class="form-control" required ng-minlength="8" name="_password">
<span class="glyphicon glyphicon-ok right" ng-show="register_form._password.$valid"></span>
</div>
<div class="alert alert-danger" ng-show="register_form._password.$error.minlength && register_form._password.$touched">
<strong> !</strong>
。
</div>
<div class="alert alert-danger" ng-show="register_form._password.$error.required && register_form._password.$touched">
<strong> !</strong>
。
</div>
<div class="form-group">
<label for="password"> :</label>
<input type="password" id="password" ng-model="user.password" class="form-control" name="password" required pwd-repeat>
<span class="glyphicon glyphicon-ok right" ng-show="register_form.password.$valid"></span>
</div>
<div class="alert alert-danger" ng-show="register_form.password.$error.pwdRepeat && register_form.password.$touched">
<strong> !</strong>
。
</div>
<div class="alert alert-danger" ng-show="register_form.password.$error.required && register_form.password.$touched">
<strong> !</strong>
。
</div>
<div class="form-group">
<label for="phone"> :</label>
<div class="row">
<div class="col-sm-10">
<input type="num" id="phone" ng-model="user.phone" name="phone" class="form-control" required ng-minlength="11" ng-maxlength="11" phone>
</div>
<div class="col-sm-2">
<button class="btn btn-default" type="button" ng-disabled="register_form.phone.$invalid"> </button>
</div>
</div>
<span class="glyphicon glyphicon-ok right" ng-show="register_form.phone.$valid"></span>
</div>
<div class="alert alert-danger" ng-show="register_form.phone.$error.phone">
<strong> !</strong>
, 。
</div>
<div class="alert alert-danger" ng-show="register_form.phone.$touched && !register_form.phone.$error.phone && (register_form.phone.$error.required || register_form.phone.$error.minlength || register_form.phone.$error.maxlength)">
<strong> !</strong>
。
</div>
<div class="form-group">
<label for="code"> :</label>
<input type="text" id="code" ng-model="user.code" class="form-control" name="code" required>
<span class="glyphicon glyphicon-ok right" ng-show="register_form.code.$valid"></span>
</div>
<!-- -->
<button class="btn btn-block btn-primary" type="submit" ng-disabled="register_form.$invalid" ng-click="save()"> </button>
</form>
js:
'use strict';
angular.module('app', [])
.controller('myCtrl', function ($scope) {
$scope.data = {};
$scope.save = function () {
alert(' !')
}
})
//
.directive('phone', function ($q, $http) {
return {
require: 'ngModel',
link: function (scope, ele, attrs, ctrl) {
ctrl.$asyncValidators.phone = function (modelValue, viewValue) {
var d = $q.defer();
$http.get('phone.json')
.success(function (phoneList) {
if (phoneList.indexOf(parseInt(modelValue)) >= 0) {
d.reject();
} else {
d.resolve();
}
});
return d.promise;
}
}
}
})
//
.directive('pwdRepeat', function () {
return {
require: 'ngModel',
link: function (scope, ele, attrs, ctrl) {
ctrl.$validators.pwdRepeat = function (modelValue) {
// , , required
if (ctrl.$isEmpty(modelValue)) {
return true;
}
return modelValue === scope.data._password ? true : false;
}
}
}
})
css:
.form-group {
position: relative;
}
.right {
position: absolute;
right: 10px;
top: 34px;
color: green;
}
phone.json:
[
13758262732,
15658898520,
13628389818,
18976176895,
13518077986
]
AngularJS 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,과 을 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 AngularJS 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AngularJS의 ng-options best practise쓸데없는 말은 하지 말고 바로 코드를 찍어라. 리소스를api에 직접 전달하지 말고 문자열이나 정형(예를 들어 귀속된ng-model="selected")을 권장합니다 angular에서 생성된 의value가 무엇인지, ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.