我想构建一个检查重复用户名的指令。所以我创建了一个index.html文件和一个uniqueId
指令。现在在指令中我无法做ngModel.setValidity()
。它正在获得undefined
。
此外,我从本地json文件username.json获取数据。
当我登录日志console.log(ngModel.$setValidity('unique', unique))
时,我得到undefined
。
我为代码::
创建了一个plunk答案 0 :(得分:1)
您需要遍历JSON中的用户。而且,如果您的currentValue
与其中任何一个匹配,则需要使用$setValidity
将其设置为无效。像这样:
dataService.getUsers().then(function(currentusers) {
console.log(currentusers)
//Ensure value that being checked hasn't changed
//since the Ajax call was made
if (currentValue == element.val()) {
currentusers.forEach(function(user) {
if (currentValue === user.property) {
ngModel.$setValidity('unique', false)
}
});
}
}, function() {
//Probably want a more robust way to handle an error
//For this demo we'll set unique to true though
ngModel.$setValidity('unique', true);
});
});
此外,您的服务每次都获得JSON。或者,您可以将JSON响应存储在角度服务(单个)中的变量中,因此它比以前更快。像这样,
dataFactory.getUsers = function() {
var deferred = $q.defer()
if (angular.isDefined(savedResults)) {
deferred.resolve(savedResults.data);
return deferred.promise;
} else {
return $http.get(serviceBase).then(
function(results) {
savedResults = results
return results.data;
});
}
};
在这里,如果数据已经可用,我们将返回已解决的承诺。它将首次获得JSON并将从内部使用。
答案 1 :(得分:0)
请检查plnkr link
如果您输入nitesh@gmail.com
,则会显示已在使用中的电子邮件。
如果您键入nitesh@gmail.com1
,则不会显示错误消息。
我改变了条件。