{
key: "username",
$asyncValidators: {
'asynch': function(username) {
var deferred = $q.defer();
$timeout(function(){
for(var i=0; i<=RegUsers.users.length-1; i++) {
console.log(RegUsers.users[i].username);
//If username is present in RegUsers
if(username === RegUsers.users[i].username) {
console.log(username + " matches " + RegUsers.users[i].username);
deferred.reject();
}else {
deferred.resolve();
}//$timeout end
} //for loop end
}, 200);//
return deferred.promise;
}// asynch function end
}, // $asyncValidators obj end
validationMessage: {
'async': "Username Already Taken"
}//validationMessage end
},//first obj end
使用 Angular Schema Form,我试图在用户名输入上创建一个异步验证,但验证仅适用于 RegUsers.users 数组中的第一个匹配对象。这是我创建的一项服务,其中包含用户详细信息的集合。当通过“异步”循环时:函数(用户名)匹配并仅验证第一个对象的用户名。它也匹配其余的用户名,但表单未按要求验证。例如:
RegUsers.users = [
{
username: "user1",
email: "user1@gmail.com",
message: "Hello, my name is user1 "
},
{
username: "user2",
email: "user2@gmail.com",
message: "Hello, my name is user2 "
},
{
username: "user3",
email: "user3@gmail.com",
message: "Hello, my name is user3 "
},
{
username: "user4",
email: "user4@gmail.com",
message: "Hello, my name is user4 "
}
];
在表单中,如果您在用户名输入字段中输入 user1,它将被验证并输出错误消息:“用户名已被采用”。但是,如果您输入 user2、user3 或 user4,这些都不会得到验证,而是与 RegUsers.users 匹配,因此表单保持为 $valid insted 而非 $invalid。我不知道为什么它不能正常工作,而且......
我仍在学习 angularJs,这是我第一次遇到 Promise,因为我正在遵循 Angular Schema Form 上的DOCS来验证我构建的表单。