我正在寻找有关何时以及为什么应该在指令定义中使用“require”选项的指南,
为什么不使用Angular中大多数情况下仅使用Scope进行通信?
突然在指令中,我要求 Controller 本身,而不仅仅是将东西附加到作用域上,这是怎么回事?
一般而言-Angular中的指令/ Controller /作用域之间有多种通信方式-
虽然我了解它们在技术上是如何工作的,但我仍不清楚要确定使用哪个以及为什么使用的准则。
对于一些常规/高级指导原则将感到高兴。谢谢。
最佳答案
如果要创建custom form controls(请参阅从控件实现自定义),即需要使用指令创建自己的表单控件,require
尤其有用。您可以require
ngModelController来通过其API /功能访问许多现有功能。
在AngularJS主页的Create Components部分中找到了另一个用例,其中pane
指令使用require: '^tabs'
来访问tabs
Controller 。由于这两个组件/指令都创建了隔离作用域,因此作用域继承不是一个选择。服务也不适合,因为您的应用程序可能具有多个tabs
指令。因此,在这种情况下,将 Controller 用作pane
指令的一种手段,以能够影响tabs
范围-从而能够达到该范围。如果不使用require
,pane
指令将无法到达tabs
范围。我在这个SO答案中更详细地讨论了这个(带有图片):'this' vs $scope in AngularJS controllers
仅当在相同元素上定义了感兴趣的 Controller (例如require
)或存在层次结构(例如, Pane ->选项卡)时,才能使用ngModelController
。