angular way, Directive user-name input, unique validation factory, api- .
<input name="username" ng-model="vm.form.username" placeholder="Name" required name="username" unique>
<div ng-messages="registerForm.username.$error" role="alert">
<div ng-message="required">
<span>Username field is required</span>
</div>
<div ng-message="unique">
<span>User with this username already exists</span>
</div>
</div>
Directive ,
a factory, usernameservice, true false.
myApp.directive('unique', function(usernameservice) {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$asyncValidators.unique = usernameservice;
}
};
});
factory, api.
myApp.factory('usernameservice', function($q, $http) {
return function(username) {
var deferred = $q.defer();
$http.get('/api/users/' + username).then(function() {
deferred.reject();
}, function() {
deferred.resolve();
});
return deferred.promise;
}
});
, , , , , ng-model-option debounce .
<input name="username" ng-model="vm.form.username" placeholder="Name" required name="username" unique ng-model-options="{ debounce: 100 }">