2

伴随着plunker

我在 div 中有一个属性级自定义指令。该指令有一个孤立的范围。在我的 div 中,我有其他指令希望在父级的范围内。

问题是我的 div 中的指令只能访问隔离范围,而不是父范围。我明白为什么,但我不清楚如何干净地解决它。

我知道我可以使用 transclude 来解决这个问题(请参阅plunker),但这感觉很草率。我不需要模板,但我必须创建一个模板才能使 transclude 工作,并且 transclude 似乎是确保我的嵌套指令可以访问正确范围的唯一方法。

有没有另一种更清洁的方法来做到这一点?

为了避免一些可能的问题:

  • 我正在使用属性级指令而不是元素级来使 IE 更容易
  • 我正在使用隔离范围,因为它是一种最佳实践——我不想意外地占用我的父范围,并且我希望该指令是可移植的。
4

2 回答 2

2

我真的不确定你想做什么。

但是您实际上正在做的是在一个孤立的范围内利用双向绑定来产生不良影响。这似乎与您的问题无关。

无论如何...这是您的 plunker 的更新

基本上发生的事情是在您的隔离指令内部,您需要使用您在范围声明中分配的任何名称,在这种情况下是toggleOn().

但是,如果您愿意,可以这样做。基本上只要打电话$parent.colorToggle()

于 2013-01-15T19:18:15.620 回答
2

您可以决定这是否比嵌入“不那么草率”:

<button ng-click="$parent.colorToggle()">Inside</button>

$parent隔离作用域可以通过属性访问父作用域。尽管隔离作用域在原型上并不从其父作用域继承,但 Angular 仍然通过 $parent 和 $$childHead 和 $$childTail 维护层次结构。

于 2013-01-15T19:18:23.123 回答