`

jQuery开发者眼中的AngularJS

阅读更多
AngualrJS是一个很贴心的web应用框架。它有很不错的官方文档和示例;经过在现实环境中的测试著名的TodoMVC project,它在海量的框架中脱颖而出;而且网上到处都是很不错演示或者展示。但是对于一个没有接触过和AngularJS相似的框架而且还是几乎都在使用像jQuery这样的JavaScript类库的开发者来讲,要从jQuery的思想转变成AngularJS的思想是有点困难的。至少对于我来说是这样的,所以我想要分享一些学习笔记希望帮到一些开发者。

Ng不是一个库(library)

要理解AngularJS,第一件要做得事情就是要明白这是一个根本上就和jQuery不一样的工具。jQuery是一个库而AngularJS是一个框架。使用库是指,你的代码决定什么时候从库中调用一个特定的方法;使用框架则是,你实现了一些回调方法,到了特定的时候框架会去调用这些方法。

当你思考下在runtime的时候会发生什么以后你就可以理解这个不同点了。jQuery在与runtime的时候会发生什么?大部分情况下,什么时候都不会发生。jQuery代码的执行是作为触发了DOM事件上绑定的jQuery方法的响应。

在加载的时候,Angular会将你的DOM树和JavaScript转向一个angular app。包含着Angular指令和过滤器的HTML会被编译成一个视图树,响应的范围和控制器会被附加上这个树上,内部的应用循环确保了视图和模型之间的数据绑定。这是一个真正的MVC例子,视图控制器和模型之间是被彻底分离了。你可以认为主要的事件/渲染/绑定循环是一个例子,它持续在运行,只有在需要的时候才调用你的控制器。

每次模型被更新(可以是通过AJAX请求,也可以是直接操作控制器),Angular会重新运行它的$digest循环,更新数据绑定确保所有东西都是同步的。

是声明,而不是命令


不像有些库或者框架,Angualr从不把HTML或者JS当作一个需要修复的bug(我正看着你呢),而是用一个自然的方式让你都不能相信自己并没有在思考。这一点还是让我用代码告诉你吧。

举个例子,我们想要根据checkbox的状态隐藏/显示某一个元素。用jQuery,我们会这么做:
<div>
   <input id="toggleShowHide" type="checkbox"><div id=”specialParagraph”>
   This content will disappear and reappear if you click the checkbox above
</div>
<script>
   $(function() {
        function toggle() {
           var isChecked = $('#toggleShowHide').is(':checked');
           var specialParagraph = $('#specialParagraph');
           if (isChecked) {
               specialParagraph.show();
           } else {
               specialParagraph.hide();
           }
       }
       $('#toggleShowHide').change(function() {
           toggle();
       });
       toggle();
   });
</script>

注意!以上的JS代码是用一种命令的方式操作DOM:拿到某一个节点和某一个属性,查看它的值,然后做这做那。现在来看看Angular是怎么做相同的事情的:
<input ng-model="showSpecial" type="checkbox">
<div ng-show=”showSpecial”>
   This content will disappear and reappear if you click the checkbox above
</div>

就是上面那段,根本没有什么代码,只是一个非常清楚的声明绑定和规则的方式。这里有个线上版本,你可以来试试.

DOM的直接操作不仅是不必要的,它在Angular中是不被提倡的。DOM由视图管理,data在scope中,方法在控制器里,任何non-trivial的变换在你重写的过滤器和指令里。这样的分离在一开始看上去是要花大量精力去消化,但是当项目变大的时候,它的回报是很可观的:代码容易维护,容易被放入模块中,方便测试和查错。

依赖注入

原谅我这么说听起来有点固执了,但是Angular拥有全世界最优雅的处理数据依赖的方式。你有一个JSON的数据源被放在$resource在Angular中:
DataSource = $resource(url, default_params, method_details)

如果要知道更多细节请看文档。任何需要这个JSON数据的控制器,可以通过将DataSource作为一个控制器参数传入的方式来使用它。这就是你需要做的全部事情。如果你需要在控制器中写一个异步的HTTP请求。将$http作为一个控制器参数。如果你需要在console中打印什么,将$log作为你的控制器方法的参数。

在Angular内部的流程是这样的:Angular分析你的代码,找到这些参数,然后将你的代码中所需要的服务推送给你。

数据获取

当Angular给了你控制模型层的全部自由以后(你可以随意结合普通数据变量,对象,和数组的时候)。它提供了一个便捷的方式与服务器的REST API交互。举个例子,下面这个方式是用来定义和使用一些来检索和保存用户记录的调用的。
var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
   user.abc = true;
   user.$save();
});

Angular给获取,设置,删除和查询数据都预定义了合理的默认值设置,用参数表示的URL让你可以根据需求来制定数据获取的方式。

Angular还有很多值得一提但这篇文章还没有说的东西,比如表单验证,单元测试还有angular-ui库,也许在以后的文章里我会说一说的。

refer to AngularJS for jQuery Developers
分享到:
评论

相关推荐

    easyui+jquery插件+angularJS

    综合来看,这个压缩包似乎是一个前端开发资源集合,涵盖了从基本的jQuery库到更高级的UI框架EasyUI,再到复杂的单页应用框架AngularJS,以及一系列的jQuery插件,可以满足开发者在构建Web应用时的各种需求。...

    angular-isotope, 轻松使用JQuery同位素的AngularJS指令.zip

    angular-isotope, 轻松使用JQuery同位素的AngularJS指令 角同位素用于JQuery同位素的AngularJS指令库。 集中于使用"ng重复"循环通过给定的array,轻松创建和填充一个单一的同位素项目。适用于稳定的同位素和 Angular...

    用JQUERY模仿Angularjs的todoList(mvc)

    这种方法更适合对jQuery熟悉但对AngularJS不那么了解的开发者,同时也展示了两种不同框架在实现相同功能时的思路差异。 总结一下,通过这次模仿,我们学习了如何在jQuery中创建一个简单的TodoList应用,包括数据...

    疯狂前端开发讲义:jQuery+AngularJS+Bootstrap前端开发实战

    《疯狂前端开发讲义:jQuery+AngularJS+Bootstrap前端开发实战》是一本专注于前端开发的实践教程,由知名IT作者李刚编著。本书旨在帮助读者深入理解和掌握前端三大热门框架——jQuery、AngularJS和Bootstrap的使用...

    疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战

    《疯狂前端开发讲义——jQuery+AngularJS+Bootstrap前端开发实战》是一本深入浅出的前端开发教程,它涵盖了三个核心的前端技术:jQuery、AngularJS和Bootstrap。这些技术在现代网页开发中扮演着至关重要的角色,使得...

    AngularJS封装jQuery Datepicker

    AngularJS 和 jQuery 的结合使用可以为开发者提供更强大的功能和更好的用户体验。这篇博文"AngularJS封装jQuery Datepicker"探讨了如何在AngularJS应用中有效地集成并封装jQuery UI的Datepicker插件。 ### 1. ...

    AngularJS封装jQuery DateTimepicker

    AngularJS 是一个强大的前端JavaScript框架,它用于构建动态web应用。而jQuery DateTimepicker是一个插件,通常用于在网页上...对于那些在AngularJS项目中需要日期时间选择功能的开发者来说,这是一篇非常实用的教程。

    jquery操作angularjs对象

    本文主要介绍了如何在同一个项目中混合使用jQuery和AngularJS两种JavaScript框架。虽然不推荐在同一个项目中混合使用这两种框架,但在一些特定情况下,这样做可以带来便利。文中提供了一个示例,展示了在AngularJS...

    angularJS和Jquery

    **标题与描述解析** 标题"angularJS和Jquery"提到了两种JavaScript库——...在实际项目中,开发者可能会根据需求结合使用,比如利用AngularJS的MVC架构和数据绑定,结合jQuery的DOM操作和动画功能,以达到最佳效果。

    疯狂前端开发讲义 jQuery AngularJS Bootstrap前端开发实战

    在前端开发领域,jQuery、AngularJS和Bootstrap是三个极为重要的技术框架,它们分别在不同的层面上解决了网页开发中的各种问题,极大地提高了开发效率和用户体验。接下来,我们将详细探讨这三个技术的核心概念、应用...

    ng-datepicker:[ng-datepicker]基于jQuery UI的AngularJs Datepicker

    [ng-datepicker]基于jQuery UI的AngularJs Datepicker Bower安装程序依赖 $ bower install ng.datepicker-ui --save AngularJS模块包括 angular.module('example', ["ngDatepicker"]); 执行 &lt;ng-datepicker ...

    jquery和angularJS两种百分比进度条实现方式

    在本篇文章中,我们将探讨如何使用jQuery和AngularJS这两种流行的JavaScript库来实现百分比进度条。 首先,让我们了解jQuery的实现方式。jQuery是一个轻量级的JavaScript库,它简化了DOM操作、事件处理以及Ajax交互...

    网上零食商城(ssm+bootstrap+jquery+AngularJs+EasyUI)

    网上零食商城是一个基于多种技术构建的电子商务平台,其核心技术栈包括Spring、SpringMVC、MyBatis(统称为SSM框架)、Bootstrap、jQuery、AngularJS和EasyUI。这些技术的结合,为商城提供了高效、易用且功能丰富的...

    【ASP.NET编程知识】ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据.docx

    "ASP.NET MVC中 jQuery与angularjs混合应用传参并绑定数据" 本文档主要讲解了如何在ASP.NET MVC中将jQuery与angularjs混合应用传参并绑定数据。下面是相关的知识点: 1. ASP.NET MVC框架: ASP.NET MVC是一种基于...

    AngularJS封装jQuery-File-Upload

    AngularJS 是一个强大的JavaScript框架,用于构建动态web应用。它由Google维护,强调了数据绑定和依赖...在实际项目中,这种封装技巧可以帮助开发者更高效地整合现有的jQuery插件资源,为AngularJS应用增添更多功能。

    jQuery+angularjs+HTML+EMAC+JavaScript+linux等.zip

    这个压缩包"jQuery+angularjs+HTML+EMAC+JavaScript+linux等.zip"包含了一系列与Web开发相关的资源,特别是前端技术的学习资料。接下来,我们将深入探讨这些关键知识点。 1. **HTML**(HyperText Markup Language)...

    angularjs封装bootstrap时间插件datetimepicker

    AngularJS和jQuery可以和平共处,只要确保jQuery操作不会影响AngularJS的数据绑定和依赖注入机制。 接下来,我们将探讨如何在AngularJS中封装Bootstrap的DateTimePicker。这个过程通常包括以下几个步骤: 1. **...

    angularjs-bootstrap-jquery中文手册

    AngularJS、Bootstrap和jQuery是Web开发中的三大重要框架和库,它们各自在不同的领域发挥着关键作用。这个压缩包提供了这三者的中文手册,对于学习和掌握这些技术来说,是一份非常宝贵的资源。 AngularJS是Google...

Global site tag (gtag.js) - Google Analytics