`
liulijun.cn.2011
  • 浏览: 100835 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

从jQuery到Angular开发者之路

阅读更多
在学习Angular时一个最常被问到的问题是:我有jQuery开发的背景,我应该怎样思考Angular?

jQuery本身是一个简单地DOM操作的实用JS库。它是一个对于DOM操作必要的包装,而不是一个构建web应用的工具。显然我们可以使用jQuery来构建动态网站,但是这就好比使用一个锤子来锯木头一样...为什么不买一个锯子来做正确事呢?

本文旨在阐述如何在不抛弃jQuery的前提下思考Angular。jQuery是一个经过多年的发展后非常成熟的工具,它可以同Angular一起使用,我们在项目中也会使用它。

在本文中,我们将经历怎样来思考Angular以及最终提供一个用于构建高效、快捷稳定的Angular应用的模型。

在下面的部分中,我们将通过一个jQuery应用来证明如何用Angular来构建它。

怎样实用jQuery来构建web应用
$(document).ready(function() {
  $("#article").click(function(evt) {
    $("#article_placeholder").append("Angular for the jQuery developer");
  });
}); 

过去,作为开发者我们常常需要人为改变DOM内容来构建一个动态页面。

我们首先布局好网页结构,然后根据内容来设计CSS,最后为页面添加互动性。也就是说,我们将互动性放置在构建过程的后面,互动性被当做了第二类公民被对待。

为什么jQuery不适合构建web应用?
观察源码,我们将动作通过ID绑定到了特定的DOM上。要是一个团队成员认为#message并不足以指定DOM元素该怎么办?我们可能会改变整个DOM来适应新的设计,或者我们会增加一个新的功能来包含#name这个ID。

紧耦合
我们的Javascript与HTML之间的关联太紧密了。如此紧密的联系在保持Javascript与HTML同步时常常会需要花费大量的工作。每当我们改变DOM时我们必须要加倍小心注意乙方Javascript的功能发生改变。

代码混乱
当使用jQuery时,web应用的功能代码并没有清晰的组织结构;怎么组织代码完全有我们决定。

用低级工具创建高级功能
当我们创建任何复杂程度的web应用时,我们会被强制的使用低级DOM操作工具来编写我们的自定义行为而不是专注于功能的实现。

Angular使用一种完全不同的方式来构建web应用:它将构建互动性当做一种原生组件并且鼓励在开发应用的过程中使用互动性。

当我们创建Angular应用时需要记住下面8个核心观点:

1)在HTML中声明互动性
但我们编写Angular应用时,我们不回把页面和互动性分开;相反,我么会在HTML中定义功能。如果我们想在点击按钮时执行一个动作,我们就把动作绑定在按钮上:

<!-- 调用 runAction() 方法 -->
<button ng-click="runAction()">Run action</button>   


这样做允许我们显式的声明DOM行为。另外,DOM元素也显式的告诉我们它们在浏览器中的行为动作。

命令式编程(imperative programming):告诉“机器”怎么做,你想要发生的就会发生。
声明式编程(declarative programming):告诉机器你想要什么发生,然后让机器自己决定应该怎么做。

2)单独编写DOM
Angular使用一个非常明确的策略是用数据来驱动功能。我们与一个数据对象进行互动(叫做$scope),而不是构建一个页面去操作。

当你想要改变视图(view)中的内容时,我们改变与其绑定的数据然后让Angular来决定怎么改变DOM。
<!-- 在浏览器中展示名字 -->
<h1>Welcome {{ name }}</h1>
<!-- 将input绑定到name -->
<input ng-model="name" 
      name="name" 
      placeholder="Enter your name" />

在这个例子中我们完全不需要去操纵DOM。这一点允许我们在编写HTML时就设计DOM的行为。

3)架构应用
编写一个Angular应用允许我们从构建一个应用的角度来思考。我们能够专注于功能,比如理解我们的应用如何同服务器端的API互动,以及当我们点击一个按钮时发生的路由行为。

我们需要考虑如何将功能分割为一些小的模块使我们的应用更容易扩展和测试。

4)改正jQuery的坏习惯
当我们刚开始学士Angular时,常常会不由自主的区使用jQuery当做拐杖。我们强烈推荐在一开是学习Angular时不要引入jQuery。

所有jQuery能做的事情,我们也能用Angular做到,而且只需要很少的代码。

如果我们坚持使用Angular而不依赖于那些作为拐杖的工具,我们就可以写出更有效率,更具扩展性以及测试性更加好的应用。如果你想要构建一个Angular中不存在的功能,看看Angular社区,也许已经有人创建好了。

5)视图是状态的官方记录
Angular应用使用视图作为互动性和数据的容器。我们使用指令为视图添加功能,反过来,使用数据绑定在应用中创建一个显示的数据动作链。

上面代码中使用的fs-modal指令非常清楚的阐明了

元素的职责所在。改变视图职责的唯一方式是改变HTML,而不是像在命令式编程中需要在需要在一个外部文档中做出改变。

6)模型改变视图,视图改变模型
Angular中一个最基本最酷的特征是我们除了编写HTML之外不需要担心DOM。

不像jQuery中我们在运行过程中保持状态或者查询document时需要命令式的构建元素并绑定它们,使用Angular可以让我们专心于构建基于数据的功能。

例如,为了展示一个载入指示器,我们可以更具一个模型的值来设置一个布尔标记用于显示或者隐藏元素:

<div ng-show="isLoading">
  <img src="/images/loading.gif" />
</div>  

现在,无论我们何时需要载入新数据,我们可以简单的改变这个“开关”(通过将isLoding设置为true)。当我们的数据载入完成时,我们可以将开关关闭,然后指示器就会隐藏。
$scope.loadNewData = function() {
  $scope.isLoading = true;
  $http.get('/api/data.json')
  .success(function(data) {
    $scope.data = data;
    $scope.isLoading = false;
  })
  .error(function(reason) {
    $scope.isLoading = false;
  });
}  

如果我们在控制器中更新了模型,视图也会更新。如果我们在视图中改变了模型,控制器中的模型也会改变,所有的部分都有保持同步。

Angular的魔法是在全过程中,我们不需要思考 -- 只需要专心于我们构建的功能即可。

7)依赖,依赖,依赖 -- 我的天!
另外一个Angular中幕后的无缝处理器是依赖注入:我们只需要告诉Angular我们需要什么去操作应用,只要Angular发现它,Angular就会自动帮我们载入它。

8)驱动测试开发
Angular中一个非常好的成分是它从开始构建到结束,都是可测试的。当我们编写测试时,我们不仅能保证我们的web应用是可运行的,我们使用的成分也是按照预期可运行的。

Angular时时刻刻都是在由测试驱动构建,因此,我们可以非常容易的编写可测试的应用。

我们可以为应用的任何一个部分编写测试 -- 为模型层,服务层,视图层,等等。

我们可以从开发者的角度测试(以及单元测试每一个组件)或者从用户的角度测试(通过端到端的测试,当我们在浏览器中个字啊如应用时,我们告诉测试框架去点击按钮以测试视图是否按照我们期待的显示)。

当我们每次进行一个微小的改动后想测试一下功能是否能运行时再也不需要人为的去点击按钮了。

总结
当我们从Angular的角度思考时,我们需要考虑:

视图,而不是DOM元素
指令,而不是事件绑定
模型作为视图的工程
功能分离

转:http://www.angularjs.cn/A0o6
分享到:
评论

相关推荐

    Angular开发者指南之入门介绍

    什么是Angular AngularJS是动态Web应用程序的结构框架。 它允许您使用HTML作为模板语言,并允许您扩展HTML的语法以清晰,简洁地表达应用程序的组件。AngularJS的数据绑定和依赖注入消除了许多你不得不编写的代码。这...

    Angular初学者快速上手教程

    最近的5年我一直在玩前端方面的东西,从 jQuery、SVG、ExtJS、Adobe Flex、 Angular,这样一路玩过来。尤其是2016年,这一整年的时间我都代表 Angular 项目 组在中国进行技术推广。在这5年,我在超过40家企业、开源...

    体验jQuery和AngularJS的不同点及AngularJS的迷人之处

    AngualrJS是一个很贴心的web应用框架。它有很不错的官方文档和示例;经过在现实环境中的测试著名...本篇通过jQuery和Angular两种方式来实现同一个实例,从而体验两者的不同点以及AngularJS的迷人之处。 首先当然需要引

    Recriando_a_interface_do_Netflix:Digital Innovation One的第一个Avanade Angular Developer训练营设计挑战

    Recreating_the_interface_do_Netflix 数字创新One Avanade Angular开发者训练营的第一个设计挑战。 描述使用HTML5,CSS3和JavaScript等简单技术重新创建世界领先的流媒体站点的界面。 在这个项目中,您将学习:如何...

    jQuery的雨「jQuery Rain」「Best jQuery」-crx插件

    jQueryRain.com.jQuery的最新博客订阅的扩展名是no。jQuery插件的一个世界目录。 来自世界第一的最新资讯 ...最佳jQuery是jQuery插件的大集合,包括HTML5,CSS3,JavaScript,Angular和PHP的教程。 支持语言:English

    JavaScript的概要介绍与分析

    JavaScript是一种流行的、...这些库和框架可以帮助开发者更加高效地实现各种功能,如React、Angular和Vue等前端框架,以及jQuery、Axios等实用库。这些资源不仅提供了丰富的API和文档,还有大量的教程和示例代码,方

    Vue

    包含着陆,数据列表,数据查询,列表分页,添加数据,修改数据和删除数据等功能,教程会从Vue入门开始讲解,包含es6,Sass,Webpack,Bootstrap ,jQuery等技术,再到后台管理系统的一些常规功能,用Vue如何去实现。...

    微信小程序HTTP请求从0到1封装

    作为一个前端开发者,从最开始的js、jQuery一把梭,后来的vue、react、angular等MVVM、MVC框架,我们在开发工程中都离不开HTTP库的使用。 HTTP库 1、jQuery的$.ajax 调用了XMLHttpRequest对象,封装在相关函数在...

    详细分析使用AngularJS编程中提交表单的方式

    在AngularJS出现之前,很多开发者就面对了表单提交这一问题。由于提交表单的方式繁杂而不同,很容易令人疯掉……然而现在看来,依然会让人疯掉。 今天,我们会看一下过去使用PHP方式提交的表单,现在如何将其转换为...

    OpenHouse:Open House CIC的新AngularBootstrap网站

    HTML5,CSS3,Bootstrap v3,Angular,Javascript / JQuery,PHP 5.6经过测试: Firefox 49.0.2 Chrome54.0.2 Internet Explorer 11.0.9600笔记: 网站使用Google Maps API v3-需要开发者API密钥(不包括在内)。...

    gama-avanade-tryout01:Resultado do Primeiro teste do simulado Gama Avanade

    Gama的Avanade Angular Academy-Simulado#1 HTML,CSS和Javascript的Primeiro simulado para testar软件开发者,Gama编写的Avanade Angular Academy(AAA)。 Nested simulado o objetivoétestar sua habilidade ...

    Mastering Web Application Development with AngularJS

    第1章 Angular之禅  1.1 邂逅AngularJS  熟悉框架  参与AngularJS项目  社区  在线学习资源  库和扩展  工具  Batarang  Plunker与jsFiddle  IDE扩展和插件  1.2 Angular JS速成  Hello World——...

    library-sniffer.zip

    javascript 库: jQuery、ExtJS、Angular 等。 常用的 web 服务: 百度统计、cnzz、Google Analytics 等。 Web 框架: WordPress、phpBB、Drupal、MediaWiki 等。 服务器环境: PHP、Apache、nginx 等。 当你安装此...

    2017年最受欢迎的UI框架

    在底层的前端框架领域中,最早是jquery称霸互联网,近两年MVVM类型的框架慢慢成为主流,Vue、React和Angular三大框架并驾齐驱。可以说,目前这四种是开发者用的最多使用最广的底层框架,也由此衍生了大量基于这些...

    UI框架工具

    在底层的前端框架领域中,最早是jquery称霸互联网,近两年MVVM类型的框架慢慢成为主流,Vue、React和Angular三大框架并驾齐驱。可以说,目前这四种是开发者用的最多使用最广的底层框架,也由此衍生了大量基于这些...

    curest0x1021

    PHP,Laravel,Node.js,Angular,jQuery Swift,Objective-C,Java,Kotlin,React Native(当前使用) 精通: Microsoft Visual Studio 使用PyCharm IDE学习Python 精通SQL 松弛 吉拉(Jira),ClicUp,...

    metronic-responsive-admin-dashboard-template v8.0.38.zip

    Metronic模板面板管理器适用于Delphi和C++Builder Bootstrap 4 in.Angular 8和React Admin都可以。这套被超过75,000开发者使用。Shell admin一个模板,HTML、CSS和JavaScript是为web应用程序的管理器构建可以使用的...

    前端微服务整合之‘‘插拔式架构’‘实现方案

    同时,前端领域保持着高速发展,早期的jQuery+Backbone+Bootstrap的MVC解决方案支撑起了业务相当长的一段时间;后来,Angular、Ember等MVVM框架开始崭露头角,前后端分离和前端组件化的思想在此时达到了鼎盛期。而在...

    awesome-learn-to-code:很棒的资源,供您学习编码

    Fortran 去Groovy 哈斯克尔JavaJavaScript 客户端Web框架角度的Angular.js 骨干Ember.js jQuery查询Meteor.js React.js Vue.js Node.js Kotlina 物镜OCaml 帕斯卡Perlp Python [R Ruby锈Scala壳SQL Swift打字稿VB...

    为AngularJS ng-inspect「ng-inspect for AngularJS」-crx插件

    使用Angular JS应用程序中“开发人员工具栏”中的“元素检查器”或“元素”选项卡选择元素时,ng-inspect可帮助您访问元素范围的属性。 此扩展将提供对作用域,isolateScope [如果隔离了作用域],rootScope,jQuery...

Global site tag (gtag.js) - Google Analytics