Сделать дочернюю область такой же, как родительская изолированная область

0

Я хотел бы сделать директиву, которая имеет изолированный охват. Внутри этой директивы есть некоторые другие директивы, и они должны иметь тот же объем, что и родительский.

<parent> <!-- Isolated scope --> 
  <child> </child> <!-- Belongs to the container isolated scope -->
</parent>

Я не могу этого сделать.

редактировать

этот Plunker показывает, как дети сохраняют ту же область, что и ее родительская, если родительский объект является дочерней областью. Я забыл, что когда вы не используете шаблон /templateUrl, данные внутри элемента не будут выбрасываться.

Кажется, что размер дочерних объектов не может быть таким же, как и у родительской области, если выделена область родительского объекта. Требование необходимо для добавления данных в родительскую область.

  • 0
    Вы должны вручную включить. Вот вопрос, на который я только что ответил недавно: stackoverflow.com/a/32060662/968155
Теги:

2 ответа

0
Лучший ответ

Пробовали ли вы использовать свойство require на свой объект определения дочернего элемента? Вам нужно будет определить контроллер на вашем родителе, а с require установленным к ^container в дочерней директиве, вы будете иметь доступ к родительскому контроллеру в своей функции link в качестве четвертого аргумента:

angular.module('app', [])

.directive('container', function(){
  return {

    restrict : 'E',

    transclude : true,

    scope : {

    },

    template : 'container <ng-transclude> </ng-transclude>',

    controller: function($scope){
        // use this to add properties to the controller itself
        // which you can then access in the child directive
        this.container  = "container";
    },

    link : function($scope){

    } 
  };
})

.directive('child', function(){
  return {
    require: '^container',
    restrict : 'E',
    template : 'child container',

    link : function($scope, element, attrs, containerController){
      $scope.child  = "child";

      // logs: containerController Object {container: "container"}
      console.log('containerController', containerController); 
    }
  };
});
  • 0
    Предполагая, что вы не используете ng-transclude , разве нет способа сделать родительскую область такой же, как и дочернюю, когда родитель имеет изолированную область? Я создал обновленный элемент, в котором родительские и дочерние элементы имеют одну и ту же область. Но я могу сделать это только тогда, когда у них нет изолированной области.
1

Это из-за ngTransclude. В документах (https://docs.angularjs.org/guide/directive) указано:

Параметр transclude изменяет способ вложенности областей. Это делает так, чтобы содержимое трансключенной директивы имело любую область действия вне директивы, а не любую область видимости внутри. При этом он предоставляет доступ к содержимому для внешнего охвата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню