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