2017-01-26 5 views
0

На основании this host attribute post, я создал this Plunker.Директива не применяется при использовании атрибута хозяина «attr»

После прочтения проблемы github, я понимаю, что мы должны использовать [attr.someDirective], чтобы условно применить атрибут директивы к элементу.

Кажется, что добавляет/удаляет атрибут директивы, как и следовало ожидать. Однако Plunker демонстрирует, что при использовании attr - даже когда директива arribute добавляется к элементу, директива никогда не применяется.

Я пропустил что-то здесь, или это не так, как работает атрибут хоста attr?

ответ

1

attr. anyDirective для работы, anyDirective (без какого-либо значения) должен быть включен в элемент (в html-шаблоне). Ниже (выделены жирным):


Вариант-1(Установить как пустой будет оказывать директиву без значения)

< тип ввода = "текст" название = "один "phoneMask [attr.phoneMask] ="»[(ngModel)] = "input_one" >

<input type="text" name="one" phoneMask [(ngModel)]="input_one"> 

Вариант-2(указан как "нулевой" не будет оказывать директиву)

< тип входного = "Текст" название = "один" phoneMask [attr.phoneMask] = "нулевой" [(ngModel)] = "input_one" >

<input type="text" name="one" [(ngModel)]="input_one"> 

Вариант-3(указан как "some_value" не будет оказывать директиву с "some_value)

< тип ввода =" текст»Name = "один" phoneMask [attr.phoneMask] = "some_value" [(ngModel)] = "input_one" >

<input type="text" name="one" phoneMask="some_value" [(ngModel)]="input_one"> 

Я тестировал выше в шлепнуть, предоставленной вами, и она работает.

Надеюсь, это вам поможет.

+0

При дальнейших расследованиях это не работает так, как мне нужно/нужно. Я обновил plunk, чтобы включить 'phoneMask' в свой собственный, как показано в примерах.Третий вход НЕ должен иметь применяемую директиву (а атрибут не находится на элементе), но он все еще запускает функцию onInputChange в директиве. – Kizmar

+0

Увольнение 'onInputChange' не имеет отношения с наличием/отсутствием директивы (атрибута) в элементе. 'OnInputChange' запускается, потому что вы установили' @HostListener ('ngModelChange', ['$ event']) 'в пользовательской директиве. Если вы хотите избежать эффекта события onInputChange, вы должны вернуться из 'onChangeInput', выполнив' if (! This.phoneMask) return; '. –

+0

Вот чего я боялся. Это означает, что сторонняя директива, которую я использую, нуждается в изменении. – Kizmar

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

  • Нет связанных вопросов^_^