2016-03-13 1 views
2

В AngularJS, если заказ директива должна быть использована путем добавления атрибута:В пользовательской директиве AngularJS можно добавить встроенную директиву в существующий элемент?

<input type="text" my-directive> 

то я могу добавить ng-keypress="handleKeypress()" к элементу? (без изменения исходного HTML, то есть) Я попытался сделать это в функции связи:

link: function(scope, elem, attrs) { 
    attrs["ngKeypress"] = "handleKeypress()"; 
} 

, но это не похоже на работу. Если вместо attrs["ngKeypress"] используется attrs["ng-keypress"], то ничего не происходит. Я могу также использовать JQuery или jqLite-х

elem.on("keypress", function(ev) { ... }); 

, но я также имею в виде только с помощью пути углового по добавлению ngKeypress, если это возможно.

+0

Вы пробовали <входной тип = "текст" нг-нажатие = "yourFunction()" моя-директива> ? – aprok

+0

пользовательская директива должна быть той, которая добавляет 'ng-keypress' –

ответ

0

<input type="text" ng-keypress="yourFunction()" my-directive> будет работать.

Вот jsbin для этого

+0

на самом деле, директива должна добавить' ng-keypress' –

+0

, почему вам нужно написать свою настраиваемую директиву, когда угловая дает вам ту же директиву в коробке? Если вы хотите идти угловым способом, вы должны использовать угловые директивы, когда это возможно. – aprok

+0

, потому что в обработчике 'ngKeypress' я определю некоторую пользовательскую логику. Это то, что я не хочу делать: добавьте эту вещь 'ng-keypress' в 200 строк кода каждый, где в базе кода, и куда идет обработчик? Или я могу добавить всю логику в директиву и просто использовать 'my-directive' где угодно, а не' ng-keypress'. –

1

Попробуйте это,

link: function(scope, element) { 
    element.attr('ng-keypress', 'handleKeypress()'); 
    element.removeAttr("my-directive"); //remove your directive attribute to restrict indefinite loops 
    $compile(element)(scope); 
} 

DEMO

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