{
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数组中的第一个匹配对象。这是我创建的服务,其中包含一组用户详细信息。当通过'async'循环时:function(用户名)匹配并且仅验证第一个对象的用户名。它也与其余用户名匹配,但表单未按要求进行验证。例如:
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,它将被验证并输出错误消息:“Username Already Taken”。但是,如果您输入user2,user3或user4,这些都不会被验证,但会与RegUsers.users匹配,因此表单保持$ valid无效。我不知道它为什么运作不正常而且......
我还在学习angularJs,这是第一次遇到promises,因为我在Angular Schema Form上跟随DOCS来验证我构建的表单。