Angularjs 如何将异步验证器添加到输入字段?

Angularjs 如何将异步验证器添加到输入字段?,angularjs,Angularjs,在文档中,它显示了以下内容: ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) { var value = modelValue || viewValue; // Lookup user by username return $http.get('/api/users/' + value). then(function resolved() { //userna

在文档中,它显示了以下内容:

ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
  var value = modelValue || viewValue;

  // Lookup user by username
  return $http.get('/api/users/' + value).
     then(function resolved() {
       //username exists, this means validation fails
       return $q.reject('exists');
     }, function rejected() {
       //username does not exist, therefore this validation passes
       return true;
     });
};

但是如何将其与输入字段连接?它没有给出这方面的示例。

您应该在指令链接函数中应用验证器。该指令必须需要ngModel,然后将该指令作为属性应用于输入标记。在您的情况下,可能看起来有点像这样:

angular.directive('isUniqueName', function () {
  return {
    require: 'ngModel',
    link: function ($scope, $elem, $attrs, ngModel) {
      ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
        var value = modelValue || viewValue;

        // Lookup user by username
        return $http.get('/api/users/' + value).
          then(function resolved() {
            //username exists, this means validation fails
            return $q.reject('exists');
          }, function rejected() {
            //username does not exist, therefore this validation passes
            return true;
          })
      }
    }
  }
})
然后在HTML代码中:

<input type='text' name='username' ng-model='username' is-unique-name />