何时在没有自己的控制器的情况下使用指令范围是否合适?

时间:2013-08-19 21:32:37

标签: javascript angularjs angularjs-directive angularjs-scope

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

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

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

  

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

我可以想到两个场景:

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

我最近实施了一个指令并使用控制器功能来驱动它的行为 用于操作DOM的链接函数。也许您有兴趣查看它。链接here