是否共享所需的^父母共享父母的范围的指令?

时间:2015-03-07 18:07:43

标签: angularjs scope require directive

我遇到了一个问题,我在

中都使用了require

myDirectiveChild1 - C1 myDirectiveChild2 - C1

儿童指令require: ^myDirectiveParent - P

P定义$scope.myVar

但C1和C2似乎覆盖了父P $scope.myVar

的价值

而不是每个人都有自己的副本。

这是正常的吗?

如何让C1,C2拥有自己的价值?

1 个答案:

答案 0 :(得分:1)

定义指令时,可以定义指令是否创建子范围scope: true,创建隔离范围:scope: { },或者只使用相同的外部范围(默认值):{{1 }}

当你的指令定义了作用域的值时,默认选项几乎总是错误的,因为你可能无意中覆盖了外部作用域的属性(或者,如果你打算覆盖它,那么你的指令将与那个紧密结合)范围)。

您的指令scope: falsec1似乎有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中创建指令的内容,其中更详细地描述了这些概念。