Angular.js: Как связать скоупы директивы, находящейся внутри другой директивы

Когда создаём директиву (restrict: 'E'), внутри неё другую (тоже restrict: 'E'), то для них создаются равнозначные скоупы, находящиеся на одном уровне (что, в принципе, логично, ведь нас никто не заставляет использовать их именно в таком виде, будучи вложенными друг в друга). Моя задача состоит как раз в том, чтобы из вложенной директивы получить доступ к родительской.

Как бы вы достигали этой цели?
  • Вопрос задан
  • 2773 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
если у вас есть две независимые друг от друга директивы, они и должны быть независимыми. Не нужно даже и пытаться сделать связь через скопы/ивенты и т.д.

Если вам нужно, что бы вложенная директива имела доступ к директиве родителю. то используйте связь через контроллер родительской директивы (читать про опцию require при определении директивы). Например:

angular.module('foo', [])

.directive('foo', function () {
    return {
        restrict: 'E',
        controller: function ($scope) {
               this.$childs = [];
               this.appendChild = function (child) {
                     this.$childs.push(child);
               }
        }
    }
})

.directive('bar', function () {
    return {
         restrict: 'E',
         requires: '^foo', // говорит о том что директива должна быть вложена в другую
         link: function (scope, el, attr, ctrl) {
               ctrl.appendChild(el);
         }
    }
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы