我遇到了一个问题,我在
中都使用了require myDirectiveChild1
- C1
myDirectiveChild2
- C1
儿童指令require: ^myDirectiveParent
- P
P定义$scope.myVar
但C1和C2似乎覆盖了父P $scope.myVar
而不是每个人都有自己的副本。
这是正常的吗?
如何让C1,C2拥有自己的价值?
答案 0 :(得分:1)
定义指令时,可以定义指令是否创建子范围scope: true
,创建隔离范围:scope: { }
,或者只使用相同的外部范围(默认值):{{1 }}
当你的指令定义了作用域的值时,默认选项几乎总是错误的,因为你可能无意中覆盖了外部作用域的属性(或者,如果你打算覆盖它,那么你的指令将与那个紧密结合)范围)。
您的指令scope: false
和c1
似乎有c2
。相反,请考虑为它们创建子范围。
scope: false
所以,每个人都会用自己的.directive("c1", function(){
return {
scope: true, // creates a child scope for c1
link: function(scope, element, attrs){
scope.myVar = "foo"; // will not overwrite the parent's myVar
}
}
});
影响父母的myVar
:
<parent>
<c1></c1>
<c2></c2>
</parent>
请注意,将两个子指令放在同一个元素上会使它们共享一个范围,而另一个会覆盖另一个范围:
<div c1 c2></div>
另请注意,require
属性仅为您提供对父级控制器的引用。因此,父级可以定义一个API,通过该API,require
它可以调用操作。这与范围和范围继承无关。
阅读更多关于在Angular's directive guide中创建指令的内容,其中更详细地描述了这些概念。