内联方法绑定是一种不好的做法
Is Inline Method Binding A Bad Practice?
我一直在研究 Angular,它使用 HTML 属性将事件绑定到模型,例如:
<form ng-submit="addTodo()">
这样做不被认为是一种不好的做法吗?我知道使用内联JavaScript(如onclick)被认为是一件非常糟糕的事情。
我对关切的分离感到关切。这种做法难道不违背这一点吗?在 JavaScript 中使用 id 或类属性并将事件绑定到 DOM 元素不是更干净吗?这似乎不那么混乱。
我还担心ng属性使HTML语义降低。HTML 应尽可能保持语义,仅包含表示信息。
我目前正在调查是否将 Angular 用于我正在开发的 Web 应用程序,这是我的担忧之一。目前,我更倾向于将香草JS与RequireJS之类的东西一起使用。
内联绑定实践
新的JavaScript框架似乎正在重新审视在标记中完成的绑定。 长期以来,这被认为是不好的做法,现在仍然如此。 众说纷纭。 支持者认为,以这种方式在标记中绑定更为明确。 不需要使用可能更改的其他类来创建绑定。
我想说的是,如果您要使用此类内联绑定,它们应该非常简单。 也就是说,您可能只引用绑定中的单个方法,而不是内联定义该方法。
ng
属性
我相信 Angular 可以选择让您使用 data-ng-*
代替,这将使它有效/语义正确。
好问题!
实际上,在 dom 中绑定事件或行为是最糟糕的做法。
但是为什么?
让我们假设,你知道这是最简单的方法和最快的方法,在元素上单击并在脚本标签中定义函数,但在几个元素/函数之后,你有很多难以维护的代码。这就是为什么这是一种不好的做法。
在 angular 中,所有代码都是"作用域"的,这意味着(几乎)一个 DOM 作用域和一个 JS 作用域,其中代码是有效/执行的,因此您可以(主要)轻松地重用指令/控制器,而无需绑定很多全局函数。
关于您公开的要点
我对关切的分离感到关切。这种做法难道不违背这一点吗?在 JavaScript 中使用 id 或类属性并将事件绑定到 DOM 元素不是更干净吗?这似乎不那么混乱。
是的,如果您这样认为,您将视图与控制器混合在一起,但是在像 Backbone 这样的框架中,您可以在控制器中定义您的 CSS 选择器的行为。不是相同的模式混合吗?-不!角度方式是更好的原因,让您为控制器制作大量模板,将JS代码减少到数据操作。
我还担心ng属性使HTML语义降低。HTML 应尽可能保持语义,仅包含表示信息。
语义为谁,用户或程序员? 我的意思是UI行为是基于DOM的软件中视图的一部分,因此您可以在不接触控制器的情况下重写模板。当您放置 ng-attibutes 时,您正在标记 (htMl) 控制器以响应用户事件。我认为,您仍然通过在 dom 中描述行为来语义,这对您的代码更好。
我目前正在调查是否将 Angular 用于我正在开发的 Web 应用程序,这是我的担忧之一。目前,我更倾向于将香草JS与RequireJS之类的东西一起使用。
AngularJS是一种组织代码的新方式,如果你使用vanillaJS,你会发现js非常实用来维护你的代码,我保证你会保存至少80%的CSS选择器和行为描述。
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- 有没有一种方法可以仅使用HTML/CSS来隐藏基于特定值的数据单元格
- 有没有一种方法可以从URL跟踪请求的域
- 有没有一种方法可以列出Ember.Object的所有绑定
- 有没有一种方法可以获得three.js的最小/lite版本
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- 在HTML/JavaScript中,有没有一种方法可以在图像开始加载时知道图像的最终布局尺寸
- 有没有一种方法可以在Javascript中进行可变递归currying
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- jQuery:使用substr()的另一种方法
- 有没有一种方法可以直接从cordova获得滚动位置
- 有没有一种方法可以通过只引用JavaScript来执行代码
- firebase中有没有一种方法可以防止快速连续写入
- GWT:有没有一种方法可以修改GWT在编译中使用的Cast.java文件
- 在Javascript(jquery)中,有没有一种方法可以检测页面锚点何时更改