在没有自己的控制器的情况下使用指令作用域何时合适
When is it appropriate to use a directive scope without its own controller?
我的理解是,指令应该主要关注DOM交互和模板化。相反,控制器负责设置与$scope
相关的应用程序逻辑。
然而Angular允许您为指令本身创建一个作用域,例如使用{ scope: true }
。如果你这样做,你应该什么时候像在控制器构造函数中那样初始化——在post-link函数中?这似乎是对指令的不恰当使用,因为它与DOM无关。
什么时候使用Angular指令范围而不是创建必须与该指令一起使用的控制器是合适的?
然而Angular允许您为指令本身创建一个范围,例如使用{scope:true}。如果你这样做,你应该什么时候做像在控制器构造函数中那样初始化后链接功能?这似乎是对指令,因为它与DOM无关。
指令可以有自己的控制器,由controller
选项定义。该控制器具有与应用程序控制器相同的功能:为指令提供行为。也就是说,我认为初始化作用域的正确位置是指令的控制器,而不是它的链接函数。
我认为指令的控制器是操作作用域的地方,而指令的链接函数是操作DOM的地方。这个SO问题对这个问题有一些很好的见解。
什么时候使用Angular指令范围而不是创建一个必须与该指令一起使用的控制器?
在我的脑海中,我能想到两种情况:
- 您希望指令访问其父作用域,但不希望它修改父作用域的数据。为了做到这一点,您需要将指令设置为具有自己的作用域,即
scope: true
- 您希望指令可重复使用。在这种情况下,指令不应该依赖于任何父作用域,并且应该有自己的隔离作用域,即
scope: {}
我最近实施了一项指令,并使用控制器功能来驱动其行为和用于操作DOM的链接函数。也许你会有兴趣去看看。此处链接。
相关文章:
- 如何将多槽transclude作用域设置为指令作用域
- 指令作用域始终为空
- 如何在angularjs中访问一个指令作用域值到另一个指令
- AngularJS指令作用域未解析(“属性名称未定义”错误)
- 角度指令作用域绑定在 ng-repeat中不起作用
- 指令 作用域更改时无法触发
- 角度JS指令作用域变量关系
- 如何使用用@定义的指令作用域生成ng-if
- 使用指令作用域变量呈现的动态模板
- 在指令作用域和控制器$scope之间共享数据
- 在没有自己的控制器的情况下使用指令作用域何时合适
- 是否可以链接指令作用域(例如obj.prop)
- 与控制器在同一元素中的自定义指令作用域
- 将指令作用域值绑定到HTML
- AngularJS-获取一个输入值并将其传递给父指令作用域
- 正在与子指令作用域共享作用域对象
- angularjs中没有更新指令作用域变量
- 如何从控制器调用指令作用域上的函数
- 从控制器外部访问指令作用域
- 异步上未更新指令作用域