AngularJS:是ng-click“好习惯”吗? 为什么AngularJS中没有ng- {event}?

我刚开始学习AngularJS,并与AngularJS的一些概念斗争。 如果有人能够解释我一些观点,那将是很棒的。

  1. 我明白ng-click在技​​术上与onclick (见这里 ),但两者都被放置在标记中。 我认为这会是一个“坏习惯”? 为什么AngularJS的核心概念之一,如果大多数人说这是“坏”? 我认为最好是从JavaScript中selectDOM元素,而不是将逻辑放在标记中。

  2. 如果ng-click是在AngularJS中点击事件的正确方法,那么我应该如何处理其他的DOM事件呢? 我发现还有其他几个像ng-mouseover这样的指令,但并不是所有的DOM事件都有一个AngularJS等价物。 我将如何处理AngularJS中的“drop”事件(因此以AngularJS的方式 – 而不是正常的方式)? 要清楚:我想拖动一个文件到我的webapp 。

非常感谢,Pipo

为什么AngularJS的核心概念之一,如果大多数人说这是“坏”?

那么,真正喜欢Unobtrusive JavaScript的人可能会说这是糟糕的。 Angularians(以及那些具有灵活背景的人)在更具说明性的方法中看到了价值。

“Angularbuild立在这样的信念之上:声明性代码比构buildUI和将软件组件连接在一起时要好得多。通过声明性地描述应用程序状态如何改变,UI将如何改变,您将从低级DOM操作任务 – 概述doc

另请参阅Bootstrap,Angular.js和Ember.js中使用的数据属性选项是否与Unobtrusive Javascript原则相冲突?

我应该如何处理其他DOM事件?

编写自己的指令来听取他们的意见(或者find别人已经写过的指令)。 Angular通过编写自己的指令,使您有能力扩展浏览器的function。

更新 :在下面的评论中,蒂姆·斯图尔特(Tim Stewart)提到了AngularUI的ui事件 ,它允许你将一个callback绑定到Angular本身不支持的任何事件上。

就本质而言,Angular需要标记中的元素才能正常工作。 而且,这些元素在每次更改时都必须进行“编译”。 所以,不pipeJavaScript如何,它已经有点“突兀”了。 你不能简单地replace标记,并像jQuery一样自动为你绑定。

严格地说,不引人注意的JavaScript:1.分离结构和行为,以便使代码更简洁和脚本维护更容易2.抢占浏览器的不兼容性3.使用干净的语义HTML层( 维基百科 )

当然,这不是Angular。 为了实现对所有东西的双向绑定,他们select在DOM中定制绑定点,而不是像jQuery那样使用类名或ID。 (一个有点不规范的方法,但显然是有效的。)

但真正的想法是这样的:基本上你的标记的每一个控制部分都不是真的直的HTML了。 现在它更像是一个模板,因此需要与正在准备渲染的引擎进行交互。 因此,不显眼的传统规则并不适用于…(FWIW,我是jQuery.on()函数的巨大粉丝/用户,当元素添加到页面时,会自动将元素绑定到事件。非常干净和灵活,恕我直言,我希望有一个类似的机制在Angular中,我喜欢在页面上的多个位置添加一个类,自动调用相同的事件处理程序,有一个地方去改变代码是好东西,但我离题了…)

对我来说,更大的问题是渐进式devise。 网页是否在没有启用JavaScript的情况下工作? 有人真的关心吗? 嗯…