Validation Angularjs异步验证器如何获取要显示的自定义错误消息
我试图显示服务器上生成的错误消息,以在返回到angular异步验证程序后显示 这是我的验证器:Validation Angularjs异步验证器如何获取要显示的自定义错误消息,validation,angularjs-directive,Validation,Angularjs Directive,我试图显示服务器上生成的错误消息,以在返回到angular异步验证程序后显示 这是我的验证器: (函数(){ var asyncValidatorTest=函数($http,$q){ 返回{ 限制:“A”, 要求:“ngModel”, 链接:功能(范围、要素、属性、ngModel){ ngModel.$asyncValidators.asyncTest=函数(modelValue,viewValue){ var userInput=modelValue | | viewValue; var me
(函数(){
var asyncValidatorTest=函数($http,$q){
返回{
限制:“A”,
要求:“ngModel”,
链接:功能(范围、要素、属性、ngModel){
ngModel.$asyncValidators.asyncTest=函数(modelValue,viewValue){
var userInput=modelValue | | viewValue;
var message=attrs[asyncValidatorTest];
返回$http({
方法:“张贴”,
url:“/AngularTest/AsyncValidatorTest”,
数据:{input:userInput}
})
.然后(功能(响应){
返回true;
},功能(回应){
message=response.statusText;
返回$q.reject(response.statusText);
});
}
}
}
}
angular.module(“angularApp”).directive(“asyncValidatorTest”[“$http”,“$q”,asyncValidatorTest]);
}())
以下是html:
异步验证测试
输入值是必需的。
{{vt.serverError}}
我错过了什么?显然存在一些问题。不清楚您在哪里设置了vt.serverError 我做了一些与你需要的相似的事情 其思想是在验证器中调用函数作为回调函数。 在这个回调中,您可以设置一条消息,然后用{vt.serverError}显示该消息 比如说
.directive('asyncValidator', function($http, $q,$log) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$asyncValidators.failed = function(modelValue, viewValue) {
var url =attrs['asyncValidator'];
var callback =attrs['asyncValidatorCallback'],
fail_callback=attrs['asyncValidatorFailedCallback']
if (url =="") {
$log.error('asyncValidator should show a validator url ex:async-validator="/validator/password/md5"')
return false;
}
var use_md5= url.indexOf('md5')>-1;
var deferred = $q.defer();
if (!viewValue) {
deferred.reject('no value');
return deferred.promise;
}
$http.post(url, {data: use_md5?md5(viewValue):viewValue})
.then(function(data){
if (typeof callback!='undefined')
scope.$eval(callback)
deferred.resolve(data);
})
.catch(function(error){
if (typeof fail_callback!='undefined')
scope.$eval(fail_callback)
deferred.reject(error)
});
return deferred.promise;
};
}
};
});
<input type="password" autocomplete="false" class="form-control" id="password-real"
name="password-real" placeholder="Password" ng-model="vm.password" required
async-validator="/validator/password/md5"
async-validator-callback="vm.getChallenge()"
async-validator-failed-callback="vm.challenge=false"
ng-model-options="{debounce:500}"
>
指令('asyncValidator',函数($http、$q、$log){
返回{
要求:'ngModel',
链接:功能(范围、元素、属性、模型){
ngModel.$asyncValidators.failed=函数(modelValue,viewValue){
var url=attrs['asyncValidator'];
var callback=attrs['asyncValidatorCallback'],
fail\u callback=attrs['asyncValidatorFailedCallback']
如果(url==“”){
$log.error('asyncValidator应显示验证器url ex:async validator=“/validator/password/md5”)
返回false;
}
var use_md5=url.indexOf('md5')>-1;
var deferred=$q.deferred();
如果(!viewValue){
递延。拒绝(“无价值”);
回报。承诺;
}
$http.post(url,{data:use_md5?md5(viewValue):viewValue})
.then(功能(数据){
if(回调类型!=“未定义”)
作用域$eval(回调)
延迟。解析(数据);
})
.catch(函数(错误){
if(失败的类型\u回调!=“未定义”)
作用域$eval(失败回调)
延迟。拒绝(错误)
});
回报。承诺;
};
}
};
});