58

我刚开始学习 AngularJS 并与 AngularJS 的一些概念作斗争。如果有人能解释我一些观点,那就太好了......

  1. 我了解这ng-click在技术上与onclick(请参阅此处)不同,但两者都放置在标记中。我认为这将是一个“不好的做法”?如果大多数人说这是“坏”,为什么这是 AngularJS 的核心概念之一?我认为从 JavaScript 中选择 DOM 元素而不是在标记中放置逻辑会更好。

  2. 如果ng-click是对 AngularJS 中的单击事件做出反应的正确方法,我应该如何处理其他 DOM 事件?我看到还有其他几个指令,例如ng-mouseover,但并非所有 DOM 事件都具有 AngularJS 等价物。我将如何处理 AngularJS 中的“drop”事件(因此以 AngularJS 方式 - 不是正常方式)?明确一点:我想将一个文件拖到我的 webapp中。

非常感谢,皮波

4

2 回答 2

54

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

好吧,真正喜欢Unobtrusive JavaScript的人可能会说它很糟糕。Angularians(以及那些有弹性背景的人)看到了更具声明性的方法的价值。

“Angular 的构建基于这样一种信念,即在构建 UI 和将软件组件连接在一起时,声明式代码比命令式代码更好......通过以声明方式描述 UI 应该如何随着应用程序状态的变化而变化,您可以从低级 DOM 操作中解脱出来任务。-- 概述文档

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

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

编写您自己的指令来倾听它们(或找到其他人已经编写的指令)。Angular 赋予你扩展浏览器功能的能力——通过编写你自己的指令。

更新:在下面的评论中,Tim Stewart 提到了 AngularUI 的ui-event,它允许您将回调绑定到 Angular 本身不支持的任何事件。

于 2013-01-15T20:42:20.007 回答
5

从本质上讲,Angular 需要标记中的元素才能正常运行。此外,在大多数情况下,这些元素每次更改时都必须“编译”。所以,不管 JavaScript 是什么,它已经有点“突兀”了。您不能简单地替换标记,并像使用 jQuery 之类的东西一样为您自动绑定所有内容。

严格来说,不显眼的 JavaScript: 1. 分离结构和行为,以使您的代码更清晰和脚本维护更容易 2. 抢占浏览器不兼容性 3. 使用干净的语义 HTML 层(维基百科

那肯定不是 Angular。为了实现对所有事物的双向绑定,他们选择在 DOM 中创建自定义绑定点,而不是像 jQuery 那样使用类名或 ID。(一种有点不标准的方法,但它显然有效。)

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

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

于 2014-07-21T20:30:09.013 回答