3

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

一般来说——在 Angular 中,指令/控制器/范围之间有很多通信方式——

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

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

会很高兴获得一些一般/高级指南。谢谢。

4

1 回答 1

2

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

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

require仅当感兴趣的控制器定义在同一元素上(例如,ngModelController)或存在层次结构(例如,窗格 -> 选项卡)时才能使用。

于 2013-05-09T14:57:13.483 回答