繁体   English   中英

AngularJS中指令(和其他部分)之间的通信

[英]Communication between directives (and other parts) in AngularJS

我正在寻找关于何时以及为什么要在指令定义中使用“require”选项的指南,为什么不使用Scope进行通信 - 就像Angular中的大多数时候一样? 怎么样,突然在指令中,我要求控制器本身,而不只是将东西附加到范围?

一般来说 - Angular中的指令/控制器/作用域之间有很多通信方式 -

  • 范围继承。
  • RootScope“发出”。
  • 服务(工厂/服务/提供商)。
  • 需要指令中的控制器。
  • 在指令中要求新的范围/隔离范围/“正常”范围。
  • 更多?

虽然我理解它们在技术上是如何工作的,但我不清楚决定使用哪一个以及为什么使用哪些指南。

对于某些一般/高级指南感到高兴。 谢谢。

如果要创建自定义表单控件, require特别有用(请参阅从控件实现自定义部分) - 即,您希望使用指令创建自己的表单控件。 您可以require ngModelController通过其API /函数访问许多现有功能。

另一个用例可以在AngularJS主页的Create Components部分找到,其中pane指令使用require: '^tabs'来访问tabs控制器。 由于这两个组件/指令都创建了隔离范围,因此范围继承不是一种选择。 服务也不合适,因为您的应用程序可能有多个tabs指令。 因此,在这种情况下,控制器用作pane指令的一种手段,以便能够影响tabs范围 - 以便能够获得范围。 不使用requirepane指令无法进入tabs范围。 我在这个SO答案中更详细地讨论了这个(带图片): AngularJS控制器中的'this'与$ scope

如果感兴趣的控制器是在同一元素(例如, ngModelController )上定义的,或者如果存在层次结构(例如,窗格 - >选项卡),则只能使用require

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM