在没有自己的控制器的情况下使用指令作用域何时合适

When is it appropriate to use a directive scope without its own controller?

本文关键字:指令 作用域 何时 情况下 自己的 控制器      更新时间:2023-09-26

我的理解是,指令应该主要关注DOM交互和模板化。相反,控制器负责设置与$scope相关的应用程序逻辑。

然而Angular允许您为指令本身创建一个作用域,例如使用{ scope: true }。如果你这样做,你应该什么时候像在控制器构造函数中那样初始化——在post-link函数中?这似乎是对指令的不恰当使用,因为它与DOM无关。

什么时候使用Angular指令范围而不是创建必须与该指令一起使用的控制器是合适的?

然而Angular允许您为指令本身创建一个范围,例如使用{scope:true}。如果你这样做,你应该什么时候做像在控制器构造函数中那样初始化后链接功能?这似乎是对指令,因为它与DOM无关。

指令可以有自己的控制器,由controller选项定义。该控制器具有与应用程序控制器相同的功能:为指令提供行为。也就是说,我认为初始化作用域的正确位置是指令的控制器,而不是它的链接函数。

我认为指令的控制器是操作作用域的地方,而指令的链接函数是操作DOM的地方。这个SO问题对这个问题有一些很好的见解。

什么时候使用Angular指令范围而不是创建一个必须与该指令一起使用的控制器?

在我的脑海中,我能想到两种情况:

  • 您希望指令访问其父作用域,但不希望它修改父作用域的数据。为了做到这一点,您需要将指令设置为具有自己的作用域,即scope: true
  • 您希望指令可重复使用。在这种情况下,指令不应该依赖于任何父作用域,并且应该有自己的隔离作用域,即scope: {}

我最近实施了一项指令,并使用控制器功能来驱动其行为和用于操作DOM的链接函数。也许你会有兴趣去看看。此处链接。