Подключение директивы в другой директиве
Периодически возникает необходимость в своей директиве добавить элементу другую директиву, предварительно её настроив.
В примере пытаюсь навесить директиву тултипа: http://plnkr.co/edit/4IvY0OZkZRdB9D1YdLBB?p=preview Не работает из-за того, что compile вызывается после того как имеющиеся атрибуты скомпилированы. Можно перекомпилировать шаблон в функции link, но придется заморачиваться, чтобы скомпилировался только новый атрибут. Появится куча костылей. Как сделать это красиво? |
|
Не-не-не. Это было бы слишком легко. Они компилят его в функции линковки и перед этим удаляют атрибут директивы. А если на элементе несколько директив? Они по второму разу перекомпилятся, либо придется велосипедить. Еще с transclude можно. Всё пробовал. Всё криво
|
Цитата:
app.directive('myDir', function ($compile) {
return {
restrict: 'A',
replace: false,
terminal: true, //this setting is important, see explanation below
priority: 1000, //this setting is important, see explanation below
compile: function compile(element, attrs) {
element.attr('tooltip', 'example');
element.removeAttr("my-dir"); //remove the attribute to avoid indefinite loop
return {
pre: function preLink(scope, iElement, iAttrs, controller) { },
post: function postLink(scope, iElement, iAttrs, controller) {
$compile(iElement)(scope);
}
};
}
};
});
|
У ng-repeat приоритет 1000, нужно побольше поставить. Кончено, вероятность того, что на элементе будет диретива с высшим приоритетом практически нулевая.
Надеюсь, все же, Ангулярцы перепишут директивы, чтобы они легче расширялись, т.к. сейчас это выглядит костыльно |
| Часовой пояс GMT +3, время: 21:51. |