我的$asyncValidator不工作-Angular Javascript
My $asyncValidator is not working - Angular Javascript
我正在尝试对电子邮件输入进行异步验证,以检查是否存在。我的指令是这样的:
app.directive('emailExist', ['$http', function ($http) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elem, attrs, ctrl) {
ctrl.$asyncValidators.emailExist = function (modelValue) {
return $http({
method: 'POST',
url: ''email-existance',
data: {
email: modelValue
}
}).then(function(res) {
console.log(res)
return (res === 'exist') ? false : true ;
});
}
}
};
}]);
据我所知,异步验证器应该根据验证结果返回true或false。(或者只是同步验证器——如果是,异步返回什么?(
服务器工作并返回我存在的真或假,但在这两种情况下,我的验证都保持有效(即使它检测到电子邮件存在(
请帮帮我!
$asyncValidator
应该而不是返回true/false。它需要返回一个被拒绝或已解决的承诺。
预期执行异步验证(例如HTTP请求(的验证集合。所提供的验证函数在模型验证过程中运行时应返回promise。一旦承诺兑现,则当满足时,验证状态将设置为真,当被拒绝则验证状态将设为false。
文档
所以你要做的是:
return $http.get('...')
.then(/** resolve **/)
.catch(/** reject **/);
或者,如果你的后端只为你提供2xx
状态(某些SPA应用程序在某些情况下要求这是真的(,我会在你的then
处理程序中检查所述响应的数据,并在延迟对象la $q.defer()
上处理解析/拒绝。
例如:
var deferred = $q.defer();
$http.get('...').then(function (res) {
res.someCondition ? deferred.resolve('yay!') : deferred.reject('boo!');
});
return deferred.promise;
相关文章:
- 向通过ReST JSON调用生成的Angular Javascript对象添加方法
- 将angular javascript文件包装为“;(function(){..[js-code here]…})()&
- 如何使用非 Angular javascript 触发角度 ng 点击
- angular/javascript无法识别函数内部的全局变量
- 如何使用angular javascript从(php编码的json)中获取值
- 用Angular/Javascript中的成对值分隔数组中的对象
- int标记angular/javascript中的enum
- 如何使用 Node/Angular/JavaScript 将多个图像上传到 Amazon AWS S3 存储桶
- Angular & Javascript:日期是 7 天前的,是星期一
- Angular/Javascript:按值复制一个简单的数字而不引用
- Angular/JavaScript自动水合实例
- 将Angular(javascript)表达式转换为对象数组
- 检测Angular JavaScript承诺链中是否存在next处理程序
- 将Angular JavaScript模块导入TypeScript
- 在Angular Javascript中合并匹配对象的数组
- Angular / javascript产品过滤器
- Windows IIS wwwroot angular javascript服务的.json文件不工作
- 在Angular/JavaScript中使用prod / dev文件
- 如何在(异步)Angular/Javascript中指定执行顺序
- 在Angular/JavaScript中,以编程方式触发列表中的单个元素