为什么在Angular控制器中使用jQuery是不好的?
为什么在Angular控制器中使用jQuery是不好的?
已关闭。此问题需要更加集中的思考。目前无法接受回答。
已锁定。此问题及其回答已锁定,因为问题不属于主题,但具有历史意义。目前无法接受新的答案或互动。
假设我熟悉在jQuery中开发客户端应用程序,但现在我想开始使用AngularJS。您能描述必要的范式转变吗?以下是几个问题,可能有助于您构筑答案:
- 我该如何不同地构建和设计客户端Web应用程序?最大的区别是什么?
- 我应该停止使用哪些事物?应该用什么来代替?
- 有哪些服务器端考虑/限制吗?
我并不想要一个关于jQuery
和AngularJS
的详细比较。
命令式 → 声明式
在 jQuery 中,选择器用于查找 DOM 元素,然后绑定/注册事件处理程序。当触发事件时,该(命令式)代码执行以更新/更改 DOM。
在 AngularJS 中,您要考虑的是视图(views),而不是 DOM 元素。视图是(声明式)HTML,其中包含 AngularJS 指令。指令在幕后为我们设置事件处理程序并提供动态数据绑定。选择器很少用到,因此对 ID(以及某些类型的类)的需求大大减少。视图与模型(通过范围)相关联。视图是模型的一个投影。事件更改模型(即数据、范围属性),并且投影这些模型的视图会“自动”更新。
在 AngularJS 中,将注意力放在模型上,而不是 jQuery 选择的 DOM 元素上,这些元素保存了您的数据。将视图视为这些模型的投影,而不是注册回调以操作用户所见内容。
关注点分离
jQuery 采用无侵入式 JavaScript - 行为(JavaScript)与结构(HTML)分离。
AngularJS 使用控制器和指令(每个都可以有自己的控制器和/或编译和链接函数)将行为从视图/结构(HTML)中删除。Angular 还有服务和过滤器来帮助分离/组织您的应用程序。
另请参见 https://stackoverflow.com/a/14346528/215945
应用程序设计
设计 AngularJS 应用程序的一种方法:
- 考虑您的模型。为这些模型创建服务或自己的 JavaScript 对象。
- 考虑如何呈现您的模型-您的视图。为每个视图创建 HTML 模板,使用必要的指令来获取动态数据绑定。
- 将控制器附加到每个视图(使用 ng-view 和路由或 ng-controller)。让控制器仅查找/获取视图需要做其工作的任何模型数据。尽可能使控制器变薄。
原型继承
您可以在不知道 JavaScript 原型继承如何工作的情况下使用 jQuery 完成许多工作。当开发 AngularJS 应用程序时,如果您对 JavaScript 继承有很好的了解,则可以避免一些常见陷阱。建议阅读:What are the nuances of scope prototypal / prototypical inheritance in AngularJS?