假设我熟悉在jQuery中开发客户端应用程序,但现在我想开始使用AngularJS。你能描述一下必要的范式转变吗?以下几个问题可能有助于您确定答案:
如何以不同的方式构建和设计客户端web应用程序?最大的区别是什么?我应该停止做什么/使用什么;我应该开始做什么?是否有服务器端的考虑/限制?
我不想详细比较jQuery和AngularJS。
假设我熟悉在jQuery中开发客户端应用程序,但现在我想开始使用AngularJS。你能描述一下必要的范式转变吗?以下几个问题可能有助于您确定答案:
如何以不同的方式构建和设计客户端web应用程序?最大的区别是什么?我应该停止做什么/使用什么;我应该开始做什么?是否有服务器端的考虑/限制?
我不想详细比较jQuery和AngularJS。
当前回答
迫切的→ 声明的
在jQuery中,选择器用于查找DOM元素,然后将事件处理程序绑定/注册到这些元素。当事件触发时,执行该(命令性)代码以更新/更改DOM。
在AngularJS中,您需要考虑视图而不是DOM元素。视图是包含AngularJS指令的(声明性)HTML。指令在幕后为我们设置事件处理程序,并为我们提供动态数据绑定。选择器很少使用,因此对ID(以及某些类型的类)的需求大大减少。视图与模型绑定(通过范围)。视图是模型的投影。事件会更改模型(即数据、范围财产),并且投影这些模型的视图会“自动”更新
在AngularJS中,考虑模型,而不是jQuery选择的保存数据的DOM元素。将视图视为这些模型的投影,而不是注册回调来操纵用户所看到的内容。
关注点分离
jQuery采用了不引人注目的JavaScript——行为(JavaScript)与结构(HTML)分离。
AngularJS使用控制器和指令(每一个都可以有自己的控制器,和/或编译和链接函数)从视图/结构(HTML)中删除行为。Angular还提供服务和过滤器来帮助分离/组织应用程序。
另请参见https://stackoverflow.com/a/14346528/215945
应用程序设计
设计AngularJS应用程序的一种方法:
想想你的模型。为这些模型创建服务或您自己的JavaScript对象。想想你想如何展示你的模型——你的观点。使用必要的指令为每个视图创建HTML模板以获得动态数据绑定。将控制器连接到每个视图(使用ng视图和布线或ng控制器)。让控制器仅查找/获取视图执行其任务所需的任何模型数据。使控制器尽可能薄。
原型继承
在不了解JavaScript原型继承的工作原理的情况下,您可以使用jQuery做很多工作。在开发AngularJS应用程序时,如果您对JavaScript继承有很好的理解,您将避免一些常见的陷阱。推荐阅读:AngularJS中范围原型/原型继承的细微差别是什么?
其他回答
这些都是很好但很长的答案。
总结我的经验:
控制器和提供者(服务、工厂等)用于修改数据模型,而不是HTML。HTML和指令定义了模型的布局和绑定。如果需要在控制器之间共享数据,请创建一个服务或工厂-它们是在应用程序中共享的单体。如果您需要HTML小部件,请创建一个指令。如果您有一些数据并且正在尝试更新HTML。。。停下!更新模型,并确保HTML绑定到模型。
实际上,如果您使用的是AngularJS,那么就不再需要jQuery了。AngularJS本身具有绑定和指令,这是一个非常好的“替代品”,可以替代jQuery中的大多数功能。
我通常使用AngularJS和Cordova开发移动应用程序。jQuery中我唯一需要的就是选择器。
通过谷歌搜索,我发现有一个独立的jQuery选择器模块。这是Sizzle。
我决定制作一个小代码片段,帮助我利用jQuery Selector(使用Sizzle)的强大功能快速启动一个使用AngularJS的网站。
我在这里分享了我的代码:https://github.com/huytd/Sizzular
jQuery是一个DOM操作库。
AngularJS是一个MV*框架。
事实上,AngularJS是为数不多的JavaScript MV*框架之一(许多JavaScript MVC工具仍然属于类别库)。
作为一个框架,它托管您的代码,并决定何时调用什么!
AngularJS本身包含一个jQuery-lite版本。因此,对于一些基本的DOM选择/操作,您真的不必包含jQuery库(它节省了许多在网络上运行的字节)
AngularJS为DOM操作和设计可重用UI组件提供了“指令”的概念,因此当您觉得需要做与DOM操作相关的事情时,应该使用它(指令是在使用AngularJS时编写jQuery代码的唯一地方)。
AngularJS涉及一些学习曲线(不仅仅是jQuery:-)。
-->对于任何来自jQuery背景的开发人员,我的第一个建议是“在跳到像AngularJS这样的富框架之前,将JavaScript作为第一类语言学习!”我很难了解到上述事实。
祝你好运
我觉得这个问题很有趣,因为我第一次认真接触JavaScript编程是Node.js和AngularJS。我从未学习过jQuery,我想这是一件好事,因为我不必忘记任何东西。事实上,我积极避免使用jQuery解决我的问题,而是只寻找一种“AngularJS方法”来解决它们。因此,我想我对这个问题的回答基本上可以归结为,“像从未学习过jQuery的人一样思考”,并避免任何直接合并jQuery的诱惑(显然AngularJS在某种程度上在幕后使用了它)。
为了描述“范式转变”,我认为一个简短的答案就足够了。
AngularJS改变了查找元素的方式
在jQuery中,通常使用选择器来查找元素,然后将它们连接起来:$('#id.class').click(doStuff);
在AngularJS中,您使用指令直接标记元素,将它们连接起来:<a ng click=“doStuff()”>
AngularJS不需要(也不希望)使用选择器查找元素——AngularJS的jqLite与完整的jQuery之间的主要区别是jqLite不支持选择器。
因此,当人们说“根本不包括jQuery”时,主要是因为他们不希望您使用选择器;他们希望你学会使用指令。直接,而不是选择!