Просмотр полной версии : Подключение директивы в другой директиве
Shitbox2
19.02.2014, 10:53
Периодически возникает необходимость в своей директиве добавить элементу другую директиву, предварительно её настроив.
В примере пытаюсь навесить директиву тултипа:
http://plnkr.co/edit/4IvY0OZkZRdB9D1YdLBB?p=preview
Не работает из-за того, что compile вызывается после того как имеющиеся атрибуты скомпилированы.
Можно перекомпилировать шаблон в функции link, но придется заморачиваться, чтобы скомпилировался только новый атрибут. Появится куча костылей.
Как сделать это красиво?
FireVolkhov
19.02.2014, 11:52
Первая строка в Гугле по запросу "add directive from compile"
Статья (http://stackoverflow.com/questions/19224028/add-directives-from-directive-in-angularjs#answer-19228302)
Пример (http://plnkr.co/edit/pmht3qfFT5GXkGAPdLlQ?p=preview)
Shitbox2
19.02.2014, 22:12
Не-не-не. Это было бы слишком легко. Они компилят его в функции линковки и перед этим удаляют атрибут директивы. А если на элементе несколько директив? Они по второму разу перекомпилятся, либо придется велосипедить. Еще с transclude можно. Всё пробовал. Всё криво
FireVolkhov
20.02.2014, 07:14
А если на элементе несколько директив? Они по второму разу перекомпилятся, либо придется велосипедить.
"priority: 1000" и "terminal: true" обрывает сборку остальных директив в первой итерации, а в линке компилится все остальные директивы.
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);
}
};
}
};
});
Shitbox2
20.02.2014, 14:10
У ng-repeat приоритет 1000, нужно побольше поставить. Кончено, вероятность того, что на элементе будет диретива с высшим приоритетом практически нулевая.
Надеюсь, все же, Ангулярцы перепишут директивы, чтобы они легче расширялись, т.к. сейчас это выглядит костыльно
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot