使子范围与父隔离范围相同

时间:2015-08-18 23:26:07

标签: angularjs

我想制定一个具有独立范围的指令。 在这个指令中有一些其他的指令,那些指令应该与它的范围相同。

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

我无法做到这一点。

修改

this如果父级是子级范围,则Plunker会显示子级如何与父级保持相同的范围。我忘了,当你不使用模板/ templateUrl时,元素内的数据不会被丢弃。

如果父范围被隔离,孩子的范围似乎不能与父范围相同。需要将数据添加到父作用域。

2 个答案:

答案 0 :(得分:1)

这是因为ngTransclude。在文档(https://docs.angularjs.org/guide/directive)中声明:

  

transclude选项会更改范围嵌套的方式。它成功了   以便transcluded指令的内容具有任何范围   在指令之外,而不是内部的任何范围。在   这样做,它使内容访问外部范围。

答案 1 :(得分: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); 
    }
  };
});