1

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

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

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

4

1 回答 1

1

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

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

我认为指令的控制器是您操作范围的地方,而指令的链接功能是您操作 DOM 的地方。这个SO question对这个问题有一些很好的见解。

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

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

  • 您希望您的指令访问其父范围,但不希望它修改父范围的数据。为此,您需要将指令设置为具有自己的范围,即scope: true.
  • 你希望你的指令是可重用的。在这种情况下,指令不应该依赖任何父范围,并且应该有自己的隔离范围,即scope: {}.

我最近实现了一个指令,并使用控制器函数来驱动它的行为和链接函数来操作 DOM。也许您有兴趣检查一下。链接在这里

于 2013-08-19T23:38:54.877 回答