2014-01-28 3 views
0

Люди,Проверка повторяющихся значений для текста, поданного в Угловой форме

У меня есть текстовое поле в форме. Когда пользователь вводит значение в этом текстовом поле, Я хотел бы проверить его на массив значений, чтобы это значение еще не существует. Я начал писать директиву и так как я новичок в этом я спокойно потерял

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

I Приведенный выше код 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

Edit: если вы не хотите, чтобы изолировать сферу, это тоже хорошо. Вам просто нужно оценивать строки в области.

Вот обновленная скрипка 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 .. если я использую директиву подсказки, я не могу использовать выделенные области. Есть ошибка, которую я получаю: Ошибка: [$ compile: multidir] Несколько директив [checkDuplicateName, tooltip], запрашивающих новую/выделенную область действия: runtimeZero

+0

Прохладный, обновленный ответ, чтобы не изолировать область. – hassassin

Смежные вопросы