【发布时间】:2013-05-27 12:38:26
【问题描述】:
我有两个不同的自定义指令,它们都有一个独立的范围。有没有办法在同一个元素上使用两个指令而不需要:
错误:多个指令 [...] 要求...上的隔离范围
我认为他们这样做会共享一个共同的范围,但似乎不会(因为我收到此错误)...
谢谢 汤姆
【问题讨论】:
标签: angularjs angularjs-directive angularjs-scope
我有两个不同的自定义指令,它们都有一个独立的范围。有没有办法在同一个元素上使用两个指令而不需要:
错误:多个指令 [...] 要求...上的隔离范围
我认为他们这样做会共享一个共同的范围,但似乎不会(因为我收到此错误)...
谢谢 汤姆
【问题讨论】:
标签: angularjs angularjs-directive angularjs-scope
好的,我已经通过对我的两个指令使用相同的控制器来解决这个问题,允许它们共享与父作用域不同的作用域...
我仍然对有关该主题的任何建议感兴趣。
【讨论】:
在对$compile method 的引用中总结了如何组合指令范围。
主要的一点是隔离范围永远不会共享,并且一个元素最多可以有一个附加范围。如果您的指令使用子范围,那么它将在两个指令之间共享。
- 无作用域 + 无作用域 => 两个不需要自己作用域的指令将使用其父作用域
- 子作用域 + 无作用域 => 两个指令将共享一个子作用域
- 子作用域 + 子作用域 => 两个指令将共享一个子作用域
- 隔离范围 + 无范围 => 隔离指令将使用它自己创建的隔离范围。另一个指令将使用其父级的 范围
- 独立作用域 + 子作用域 => 行不通!只有一个范围可以与一个元素相关联。因此不能应用这些指令 到同一个元素。
- 隔离范围 + 隔离范围 => 行不通!只有一个范围可以与一个元素相关联。因此不能应用这些指令 到同一个元素。
【讨论】:
嗯,我认为 Angular 让您可以在使用父作用域和在指令之间进行通信之间进行选择。
您可以通过在“master”指令中添加一个“slave”指令使用的控制器函数来添加一个接口来实现后者。 slave通过require: '^masterDirective'解释依赖,可以在link函数中使用它的接口。
看官方解释,有一个很好的例子:https://docs.angularjs.org/guide/directive#creating-directives-that-communicate
【讨论】: