2014-01-28 27 views
0

民間,檢查一個文本字段的重複值

我有一個窗體中的文本字段。當用戶在這個文本字段中輸入一個值時,我想用一個值數組來檢查它,以確保這個值不存在。 我開始寫一個指令,因爲我是新來這個我安靜失去

<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

我創建了一個fiddle這裏有一個你的想法的工作版本。這只是一些小事情,看起來你並沒有正確地傳遞數據。當你訪問attrs時,它只是給你標記中的字符串,所以attrs.ngModel只會給你一個字符串「users.name」。

我創建了一個隔離範圍,以便您可以看到範圍。

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

此外,角轉彎這種情況下,在HTML的成像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; 
     } 
    } 
    }); 

希望這有助於!

+0

Hassassin ..如果我使用tooltip指令我不能使用隔離作用域..這裏是我得到的錯誤:錯誤:[$ compile:multidir]多個指令[checkDuplicateName,工具提示]要求新/隔離作用域: runtimeZero

+0

很酷,更新了不隔離範圍的答案。 – hassassin