我正在寻找有关何时以及为什么应该在指令定义中使用“require”选项的指南,
为什么不使用Angular中大多数情况下仅使用Scope进行通信?
突然在指令中,我要求 Controller 本身,而不仅仅是将东西附加到作用域上,这是怎么回事?

一般而言-Angular中的指令/ Controller /作用域之间有多种通信方式-

  • 范围继承。
  • RootScope“发出”。
  • 服务(工厂/服务/提供者)。
  • 在指令中需要 Controller 。
  • 在指令中需要新的作用域/隔离作用域/“普通”作用域。
  • 还有吗?

  • 虽然我了解它们在技术上是如何工作的,但我仍不清楚要确定使用哪个以及为什么使用的准则。

    对于一些常规/高级指导原则将感到高兴。谢谢。

    最佳答案

    如果要创建custom form controls(请参阅从控件实现自定义),即需要使用指令创建自己的表单控件,require尤其有用。您可以require ngModelController来通过其API /功能访问许多现有功能。

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

    仅当在相同元素上定义了感兴趣的 Controller (例如require)或存在层次结构(例如, Pane ->选项卡)时,才能使用ngModelController

    10-04 22:47