我想制定一个具有独立范围的指令。 在这个指令中有一些其他的指令,那些指令应该与它的范围相同。
<parent> <!-- Isolated scope -->
<child> </child> <!-- Belongs to the container isolated scope -->
</parent>
我无法做到这一点。
修改
this如果父级是子级范围,则Plunker会显示子级如何与父级保持相同的范围。我忘了,当你不使用模板/ templateUrl时,元素内的数据不会被丢弃。
如果父范围被隔离,孩子的范围似乎不能与父范围相同。需要将数据添加到父作用域。
答案 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);
}
};
});