我刚刚开始学习AngularJS并且与AngularJS的一些概念斗争。如果有人可以向我解释一些问题,那将会很棒......
我知道ng-click
在技术上与onclick
不同(请参阅here),但两者都放在标记中。我认为这将是一个“不好的做法”?如果大多数人说这是“坏”,为什么这是AngularJS的核心概念之一?我认为最好从JavaScript中选择DOM元素,而不是在标记中放置逻辑。
如果ng-click
是对AngularJS中的点击事件作出反应的正确方法,我应该如何处理其他DOM事件?我看到还有其他几个指令,如ng-mouseover
,但并非所有DOM事件都有AngularJS等价物。我如何处理AngularJS中的'drop'事件(因此采用AngularJS方式 - 不是正常方式)?要明确:我想要drag a file into my webapp。
非常感谢, PIPO
答案 0 :(得分:54)
为什么这是AngularJS的核心概念之一,如果大多数人都说这是“坏”?
嗯,真正喜欢Unobtrusive JavaScript的人可能会说这很糟糕。 Angularians(以及那些具有弹性背景的人)在更具声明性的方法中看到了价值。
“Angular是围绕以下信念构建的:当构建UI并将软件组件连接在一起时,声明性代码优于命令式......通过声明性地描述UI应用程序状态发生变化时应如何更改,您可以从低级别中解脱出来级别DOM操作任务。 - Overview doc
我应该如何处理其他DOM事件?
编写自己的指令来监听它们(或找到其他人已经写过的指令)。 Angular使您能够通过编写自己的指令来扩展浏览器的功能。
更新:在下面的评论中,Tim Stewart提到了AngularUI的ui-event,它允许您将回调绑定到Angular本身不支持的任何事件。
答案 1 :(得分:5)
本质上,Angular需要标记中的元素才能正常运行。此外,这些元素必须编译成#34;每次他们改变,大部分时间。所以,它已经有点"突兀"不管JavaScript。你不能简单地替换标记,并像jQuery一样为你自动绑定所有东西。
严格来说,不引人注目的JavaScript: 1.分离结构和行为,以使您的代码更清晰,脚本维护更容易 2.抢占浏览器不兼容性 3.使用干净的语义HTML层 (Wikipedia)
当然,这不是Angular。为了实现对所有内容的双向绑定,他们选择在DOM中创建自定义绑定点,而不是像jQuery那样使用类名或ID。 (有点非标准的方法,但它显然有效。)
但是想到它的真正方法是:基本上你的标记的每个受控部分都不再是直接的HTML了。它现在更像是一个模板,因此需要与准备渲染的引擎进行交互。因此,传统的不引人注意的规则并不适用......(FWIW,我是jQuery.on()函数的巨大粉丝/用户,在添加元素时自动将元素绑定到事件非常干净和灵活,恕我直言,我确实希望在Angular中有一个类似的机制。我喜欢在页面上的多个位置添加一个类来自动调用相同的事件处理程序。有一个地方可以改变代码是件好事。但我离题了...)
对我而言,更大的问题是渐进式设计。网页是否在没有启用JavaScript的情况下工作?有人真的关心这个吗?嗯...