мне нужно получить контроллер родителя, так что моя директива имеет свойство требовать, следующим образом:Доступ к контроллеру материнской директивы рекурсивно в AngularJS
module.directive('tag', function() {
return {
require: '?^tag',
restrict: 'E',
controller: function() {
this.payload = getPayload();
},
link: function (scope, element, attrs, ctrl) {
usePayload(ctrl.payload);
}
};
});
Однако параметр Ctrl функции связи возвращает контроллер текущей директивы , а не родительский. Документация AngularJS ясно из этого:
?^- Попытайтесь найти требуемый контроллер, выполнив поиск родителей элемента или верните нулевой, если не нашли.
Что я делаю неправильно?
'require: '?^Parent'' или назначить контроллер директивы на имя родительского контроллера или оставить контроллер директивы все вместе, а' ctrl' в параметрах ссылки по умолчанию будет принадлежать родительскому. –
Посмотрите на это видео [John Lindquist] (http://egghead.io/lessons/angularjs-directive-communication), что очень хорошо объясняет связь между вложенными директивами. –
@ m.e.conroy: Я должен использовать одно и то же имя в 'require'. Если контроллер не объявлен, 'ctrl' по умолчанию' undefined'. –