我使用$asyncValidators
来验证字段值。使用$resource
从服务器获取字段值。在页面加载时,该值为空,验证器向服务器发送请求。当$resource
获取资源时,将填充字段值,验证程序会向服务器发送另一个请求。
我想跳过这两个初始请求,因为它们没用。我该怎么做?
我的输入字段:
<input name="name" class="form-control" ng-model="user.name" validate-name>
我的指示:
angular.module('myapp').directive('validateName', function($http, $q) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {
ctrl.$asyncValidators.name = function(modelValue, viewValue) {
return $http.post('/validate-username', {username: viewValue}).then(function(response) {
if (!response.data.validUsername) {
return $q.reject(response.data.errorMessage);
}
return true;
});
};
}
};
});
答案 0 :(得分:1)
合理的条件是触摸模型;如果不是,只需返回已解决的承诺,而无需访问服务器。即:
ctrl.$asyncValidators.name = function(modelValue, viewValue) {
if( ctrl.$touched ) {
return $http.post('/validate-username', {username: viewValue})....
}
else {
return $q.resolve(true);
}
};