【发布时间】:2013-03-31 17:01:02
【问题描述】:
Angular 为我们提供了一种编写指令的机制——它的功能非常强大。但我一直想知道的是——在什么情况下你应该真正编写你自己的自定义指令。
我们不断在 Stack Overflow 内部和周围看到各种问题,各种人试图编写指令(在我看来)一开始就不需要编写。在大多数情况下,它们可以通过重复、切换和显示的组合来解决。查看包含指令的问题示例,我认为这些指令首先不应该是指令!
https://stackoverflow.com/questions/16101073/angularjs-directive-is-not-working-in-ie-10
Fire button click in AngularJS
angularjs: using a directive inside the ui-bootstrap modal
一些示例场景。无论如何我都不会挑剔它们。因为我确信任何人都不清楚我们何时应该使用/编写指令。
我们看到人们使用指令作为模板机制的场景。这是正确的做事方式吗?或者,还有更好的方法? (也许是ng-include?)使用指令作为模板机制有什么好处/坏处吗?这个问题的原因是,有时我想知道人们是否编写指令,因为他们来自 jquery 世界,他们首先想到的是编写 DOM 操作代码,并且由于 Angular 的方式是不在控制器中操作 DOM,所以这一切都倾向于编写指令中的所有代码。
编辑:
我相信这种混淆(将东西塞进指令中)是因为 Angular 没有单独的“视图”概念 - 不像 Backbone(它只有一个“视图”但没有组件!)。指令在定义组件方面非常出色——但我认为如果你使用它们来创建“视图”,你将失去一些“角度”的方式。不过,这是我的观点——这就是为什么我要征求其他 Angular 社区的想法。
更简单的指令(只做一件事的指令!)的好处是它们绝对容易测试。如果您查看所有 ng 指令,它们都会做一件事并且做得很好。
在 Angular 中定义可重用“视图”(不是组件!)的最佳方式是什么?应该写在指令中吗?或者,还有更好的方法?
如果其中一位 Angular 开发人员对此事有意见,那就太棒了!
【问题讨论】:
-
只要你想进行 DOM 操作,你就需要编写一个指令。控制器中不应该有单一的 do 操作。但是指令里面可以有控制器。
-
指令控制器有其他一些原因。那些控制器和普通控制器是不同的。
标签: javascript angularjs angularjs-directive