Javascript 回调函数内部的角度形式验证-angular 1.2.5
我正在使用indexedDb作为存储的应用程序。在其中一个表单中,在检查是否存在密钥时,我遇到了一个奇怪的错误。下面是我的验证指令代码Javascript 回调函数内部的角度形式验证-angular 1.2.5,javascript,validation,angularjs,angularjs-directive,indexeddb,Javascript,Validation,Angularjs,Angularjs Directive,Indexeddb,我正在使用indexedDb作为存储的应用程序。在其中一个表单中,在检查是否存在密钥时,我遇到了一个奇怪的错误。下面是我的验证指令代码 app.directive('ensureUnique',['abcService', function ($abcService){ return { require : 'ngModel', link : function(scope,elem,attr,ctrl) { scope.$watch(attr.ngModel, f
app.directive('ensureUnique',['abcService', function ($abcService){
return {
require : 'ngModel',
link : function(scope,elem,attr,ctrl) {
scope.$watch(attr.ngModel, function(){
var checkExpenseType = $abcService.checkExpenseType();
var index = checkExpenseType.get(scope.newExpenseName );
index.onsuccess = function (e) {
var result = e.target.result;
if(result) {
ctrl.$setValidity('exists', true);
}else{
ctrl.$setValidity('exists', false);
}
};
index.onerror = function(e) {
// TODO
};
});
},
}}
]);
输入文本时,如果值与db中的键匹配,则第一次显示正确的错误消息。在下一次按键时,错误消失,这是正确的行为,但对于后续按键,错误再次出现,即使按键在DB中不存在
For example if "Food" is the key in DB
Foo - No error
Food - Error - Key exists
Foods - No error
Foodss - Error - key exists
Foodsss - Error - key exists
...
由于存在3个字符的最小长度标准,因此在输入3个字符之前不会触发指令
还请让我知道我是否以预期的方式进行验证,或者是否存在更好的方式
提前谢谢我把你的小提琴叉起来,做了一些改动 首先,我添加了一个作用域。$apply(),因为您的验证是异步进行的,因此超出了angular的摘要周期 其次,如果找到匹配项,我将$setValidity替换为false,如果未找到匹配项,则将$setValidity替换为true。如果您想在条目已经存在的情况下使字段无效,我相信这是正确的
if(result) {
// If a match is found, mark the field as invalid.
ctrl.$setValidity('exists', false);
}else{
// If a match is not found mark "exists" as valid.
ctrl.$setValidity('exists', true);
}
// Apply the validation changes.
scope.$apply();
这里是小提琴抱歉意识到我的第一篇文章是一个未更改的小提琴-现在更新。太棒了!很乐意帮忙。