我想建立一个自定义angularjs唯一值指令

时间:2017-03-29 08:24:30

标签: angularjs angularjs-directive

我想构建一个检查重复用户名的指令。所以我创建了一个index.html文件和一个uniqueId指令。现在在指令中我无法做ngModel.setValidity()。它正在获得undefined

此外,我从本地json文件username.json获取数据。

当我登录日志console.log(ngModel.$setValidity('unique', unique))时,我得到undefined

我为代码::

创建了一个plunk

https://embed.plnkr.co/XTPf9PjiMn9if5Y0DaHt/

2 个答案:

答案 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并将从内部使用。

working plunker

答案 1 :(得分:0)

请检查plnkr link

如果您输入nitesh@gmail.com,则会显示已在使用中的电子邮件。 如果您键入nitesh@gmail.com1,则不会显示错误消息。 我改变了条件。