Как менять template в зависимости от того на каком эдементе висит директива?
Есть директива и несколько элементов на которых она висит. В зависимости от того на какой элемент кликнули, отрисовывается тот или иной шаблон. На каждом из элементов висят свои параметры по которым можно иденцифицировать то по чем кликнули. Но link ни в какую не хочет рендерить и ошибок не выдает
На момент отработки линка шаблон должен быть уже готов (у него уже есть объекты контроллера и элемента). Поэтому динамически подставлять шаблон в link не получится, только в compile или templateUrl (https://github.com/angular/angular.js/issues/1039).
DigitalSmile: а еще можно подключать через ng-include. Я собственно пока так решаю подобные проблемы если только не стоит вопрос о максимальной производительности.
Сергей Протько: да, так тоже можно (даже нужно, мне кажется). Просто речь в вопросе шла о директиве. Если бы элементы были разные (без общего кода), можно было написать что-то вроде такого:
...
$scope.template = 'default.html';
$scope.condition = function () {
if (someClickCondition) {
$scope.template = 'other.html';
}
return someClickCondition;
}
...
DigitalSmile: ну так я в контексте директивы и говорил:
function myDirective() {
return {
template: '<ng-include src="directiveTemplate"></ng-include>',
link: function (scope) {
// меняем темплейт в зависимости от данных
}
}
}
Если зависит от клика - то имеет смысл исользовать $compile и подготовить два варианта заранее. Если от атрибутов и не зависит от данных в скоупе - можно вместо темплейта поставить замыкание и там разруливать исходя из того что записано в элементе или атрибутах.