2015-08-18 2 views
0

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

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

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

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

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

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

+0

Вам необходимо вручную перевести. Вот вопрос, который я только что ответил недавно: http://stackoverflow.com/a/32060662/968155 –

ответ

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', не существует способа сделать родительскую область той же, что и ее дочерние элементы когда у родителя есть изолированная область? Я сделал обновленный плункер, где родитель и дети имеют одну и ту же область. Но я могу сделать это только тогда, когда у них нет изолированного пространства. – gr3g

1

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

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

Смежные вопросы