以Angular格式检查文本字段的重复值

时间:2014-01-28 17:37:07

标签: angularjs angularjs-directive

民间,

我在表单中有一个文本字段。当用户在此文本字段中输入值时, 我想针对一组值进行检查,以确保该值尚不存在。 我开始写一个指令,因为我是新手,我很安静,

<input type="text" ng-model="user.name" placeholder="Enter Name" required checkDuplicateName existing-names="allUsers" tooltip/>

我上面的代码allUsers看起来像这样

var allUsers = ['john','james','Tim'];

我的指示如下:

angular.module('formInputs').directive('checkDuplicateName', function() {
  return {
    restrict : 'A',
    require : 'ngModel',
    link:  function(scope, element, attrs, ctrl) {
      scope.$watch(attrs.ngModel,function(){
        for (var i =0; i<attrs.existing-names.length;i++) {
           if (attrs.existing-names[i] === attrs.ngModel) {
             attrs.$set('tooltip','Name already exsists');
             return;
           }
        }
      });
    }
  }

});

我遇到的问题是指令没有被解雇。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我在这里创建了一个fiddle,其中包含您想法的工作版本。这只是一些小事,看起来你没有正确传递你的数据。当你访问attrs时,它只是给你标记中的字符串,所以attrs.ngModel只会给你“users.name”字符串。

我创建了一个隔离范围,以便您可以看到范围。

  scope: {
      model: '=ngModel',
      users: '=existingNames'
  },

此外,角度将这种情况在hs中转换为js中的驼峰情况,例如:thisCaseInHtml

编辑:如果您不想隔离范围,那也没关系。您只需要在范围内评估字符串。

这是一个更新的小提琴http://jsfiddle.net/ddJ4Z/10/。注意如何在范围上评估值。

scope.$watch(attrs.ngModel,function(newVal){
    var users = scope.$eval(attrs.existingNames) || [];
    for (var i =0; i<users.length;i++) {
       if (users[i] === newVal) {
           window.alert(newVal);
         return;
       }
    }
  });

希望这有帮助!