Angularjs 检查以角度形式归档的文本的重复值

Angularjs 检查以角度形式归档的文本的重复值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,各位 我在表单中有一个文本字段。当用户在此文本字段中输入值时, 我想对照一个值数组检查它,以确保这个值不存在。 我开始写指令,因为我是新手,所以我很迷茫 <input type="text" ng-model="user.name" placeholder="Enter Name" required checkDuplicateName existing-names="allUsers" tooltip/> 我的指示如下: angular.module('formInputs').

各位

我在表单中有一个文本字段。当用户在此文本字段中输入值时, 我想对照一个值数组检查它,以确保这个值不存在。 我开始写指令,因为我是新手,所以我很迷茫

<input type="text" ng-model="user.name" placeholder="Enter Name" required checkDuplicateName existing-names="allUsers" tooltip/>
我的指示如下:

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;
           }
        }
      });
    }
  }

});
angular.module('formInputs')。指令('checkDuplicateName',function(){
返回{
限制:“A”,
要求:'ngModel',
链接:函数(范围、元素、属性、ctrl){
作用域$watch(attrs.ngModel,function(){
对于(var i=0;i我在这里创建了一个包含您想法的工作版本。这只是几件小事,看起来您没有正确地传递数据。当您访问attrs时,它只会给您标记中的字符串,因此attrs.ngModel只会给您“users.name”作为字符串

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

  scope: {
      model: '=ngModel',
      users: '=existingNames'
  },
此外,angular将html中的大小写转换为js中的驼峰大小写,如:thisCaseInHtml

编辑:如果您不想隔离作用域,也可以。您只需要计算作用域上的字符串

这里有一个更新的修改。注意这些值是如何在作用域上计算的

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;
       }
    }
  });
scope.$watch(attrs.ngModel,function(newVal){
var users=scope.$eval(attrs.existingNames)| |[];

对于(var i=0;ihHicker..如果我使用工具提示指令,我无法使用隔离作用域..下面是我得到的错误:错误:[$compile:multidir]多个指令[checkDuplicateName,tooltip]要求在以下位置创建新的/隔离作用域:
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;
       }
    }
  });