Javascript $q.defer(),AngularJS1$asyncValidators只匹配数组中的第一个对象
在表单中,如果在用户名输入字段中输入user1,它将被验证并输出错误消息:“username ready take”。但是,如果输入user2、user3或user4,这些都不会得到验证,而是与RegUsers.users匹配,因此表单将保持$valid而不是$invalid。我不知道为什么它不能正常工作,而且Javascript $q.defer(),AngularJS1$asyncValidators只匹配数组中的第一个对象,javascript,angularjs,validation,angular-schema-form,Javascript,Angularjs,Validation,Angular Schema Form,在表单中,如果在用户名输入字段中输入user1,它将被验证并输出错误消息:“username ready take”。但是,如果输入user2、user3或user4,这些都不会得到验证,而是与RegUsers.users匹配,因此表单将保持$valid而不是$invalid。我不知道为什么它不能正常工作,而且 我还在学习angularJs,这是我第一次遇到promises,因为我遵循AngularSchema表单来验证我构建的表单。如果您还没有解决这个问题,请将username和console
我还在学习angularJs,这是我第一次遇到promises,因为我遵循AngularSchema表单来验证我构建的表单。如果您还没有解决这个问题,请将
username
和console.log(RegUsers.users[I]的内容调试到for循环中
。否则,请关闭此问题。如果您尚未解决此问题,请将用户名
和控制台.log(RegUsers.users[i]
的内容调试到for循环中。否则,请关闭此问题。
{
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
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 "
}
];