angular Доступ к контроллеру ngModel в директиве с пользовательским шаблоном в компиляции

Я хочу получить доступ к контроллеру ngModel (чтобы позже использовать setValidity для проверки пользовательского поля ввода). Однако, когда я хочу использовать директиву в качестве атрибута (а не класса), функция replaceWith выдает ошибку, что не может найти контроллер ngModel. Я создал скрипку здесь:

jsfiddle.net/6HcGS/396

Кто-нибудь может мне помочь?

Это связано с моими первыми вопросами:

пользовательская директива привязки данных angular с заменой html в функции компиляции


person Wouter Willems    schedule 26.10.2013    source источник


Ответы (2)


<input zippy ng-model="title">

zippy и ngModel — это директивы, которые отображаются в определенном порядке. В этом случае zippy отображается перед ngModel. Вы можете изменить порядок директив, как предложил Максим Шоустин, или вы можете указать порядок рендеринга, указав атрибут priority в функции создания директивы следующим образом:

  .directive('zippy', function($compile){
    return {
      restrict: 'A',
      priority: -1,
      replace: true,
      ...

Приоритет по умолчанию равен 0. Директивы с более высоким приоритетом отображаются первыми.

person bekite    schedule 26.10.2013
comment
да, думал поставить приоритет, тоже должно работать. В своих проектах я стараюсь писать пользовательские директивы на первое место. В любом случае +1 :) - person Maxim Shoustin; 26.10.2013
comment
Большое спасибо! Я бы никогда не подумал о расстановке приоритетов для выполнения этой работы! - person Wouter Willems; 26.10.2013

Вместо

<input zippy ng-model="title"/>

попробуйте написать атрибут после ng-model, например:

 <input  ng-model="title" zippy/>

Вам интересно загрузить zippy перед директивой ng-model.

Как говорит Беките, установите priority: -1

Демонстрация Fiddle

person Maxim Shoustin    schedule 26.10.2013
comment
Благодарю вас! Отличный ответ на мой вопрос! - person Wouter Willems; 26.10.2013