好问题!
在 dom 中绑定事件或行为实际上是最糟糕的做法。
但为什么?
假设,你知道这是最简单和最快的方法,在元素上单击并在脚本标签中定义函数,但是在几个元素/函数之后,你有很多难以维护的代码。这就是为什么它是一个不好的做法。
在 Angular 中,所有代码都是“作用域”,这意味着(几乎)一个 DOM 作用域和一个代码有效/执行的 JS 作用域,因此您可以(主要)轻松地重新利用指令/控制器,而无需绑定大量全局函数。
关于你暴露的点
我担心关注点分离。这种方法不反对吗?在 JavaScript 中使用 id 或 class 属性并将事件绑定到基于它们的 DOM 元素不是更干净吗?这似乎不那么混乱了。
是的,如果您这样认为,您将视图与控制器混合在一起,但是在诸如骨干之类的框架中,您可以在控制器中定义您的 css 选择器用于行为。模式的混合不一样吗?- 不!角度方式更好,因为可以让您为控制器制作大量模板,将 js 代码减少为仅数据操作。
我还担心 ng 属性会降低 HTML 的语义。HTML 应尽可能保持语义,仅包含表示信息。
语义为谁,用户或程序员?我的意思是 ui-behavior 是基于 dom 的软件中视图的一部分,因此您可以在不接触控制器的情况下重写模板。当您放置 ng-attributes 时,您正在标记 (htMl) 以供控制器对用户事件做出反应。我认为,通过描述 dom 中的行为,您仍然是语义化的,这对您的代码更好。
我目前正在调查是否将 Angular 用于我正在开发的 Web 应用程序,这是我关心的问题之一。目前,我更倾向于将 vanilla JS 与 RequireJS 之类的东西一起使用。
AngularJS 是一种新的组织代码的方式,如果你使用 vanillaJS,你会发现 js 非常有用来维护你的代码,我保证你会保存至少 80% 的 css 选择器和行为描述。