AngularJS 重新定义了前端应用的开发方式。面对HTML和JavaScript之间的界线,它非但不畏缩不前,反而正面出击,提出了有效的解决方案。

很多前端应用的开发框架,比如Backbone、EmberJS等,都要求开发者继承此框架特有的一些JavaScript对象。这种方式有其长 处,但它不必要地污染了开发者自己代码的对象空间,还要求开发者去了解内存里那些抽象对象。尽管如此我们还是接受了这种方式,因为网络最初的设计无法提供 我们今天所需的交互性,于是我们需要框架,来帮我们填补JavaScript和HTML之间的鸿沟。

AngularJS 填上了这条鸿沟。

而且有了它,你不用再“直接”操控DOM,只要给你的DOM注上metadata(即AngularJS里的directive们),然后让AngularJS来帮你操纵DOM。

同时,AngularJS不依赖(也不妨碍)任何其他的框架。你甚至可以基于其它的框架来开发AngularJS应用。

它就这么好用。听着挺厉害?是挺厉害的。通过这个七步系列,我们会带着你开始用AngularJS写厉害的应用——不管你之前有没有接触过。跟着我们,我们会教你成为一个专家级的AngularJS开发者。

不过首先我们得搞清楚:什么时候该用AngularJS?

AngularJS是一个 MV* 框架,最适于开发客户端的单页面应用。它不是个功能库,而是用来开发动态网页的框架。它专注于扩展HTML的功能,提供动态数据绑定(data binding),而且它能跟其它框架(如jQuery)合作融洽。

如果你要开发的是单页应用,AngularJS就是你的上上之选。Gmail、Google Docs、Twitter和Facebook这样的应用,都很能发挥AngularJS的长处。但是像游戏开发之类对DOM进行大量操纵、又或者单纯需要 极高运行速度的应用,就不是AngularJS的用武之地了。

读过上面的介绍,现在是你学习AngularJS所要理解的第一个话题了:

1. 如何开始开发一个应用

在这个系列教程里,我们会开发一个NPR(美国全国公共广播电台)广播的音频播放器,它能显示Morning Edition节目里播出的最新故事,并在我们的浏览器里播放它们。完成版的Demo可以看这里:http://www.ng-newsletter.com/code/beginner_series/)

写AngularJS的应用,我们会一起写互动层面和展示层面。

这一开始可能让你觉得有点奇怪,特别是当你用过其他框架将这两个层面分别对待的框架时。然而一旦你摸到诀窍,AngularJS 的写法就会变成你的第二天性了。

让我们来看一个能用AngularJS开发的最简单的应用:


  1. <!doctype html>
  2. <htmlng-app>
  3. <head>
  4. <scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
  5. </head>
  6. <body>
  7. <div>
  8. <inputtype="text"ng-model="yourName"placeholder="Enter a name here">
  9. <h1>Hello, {{ yourName }}!</h1>
  10. </div>
  11. </body>
  12. </html>

你看,不费吹灰之力,你就得到了双向数据绑定。

双向数据绑定,意味着你可以在后台改变数据,而这些变动立刻就会像魔法一样自动出现在View上(这里实际上没有魔法,我们待会就会看到这是怎么实现的。)

同样地,如果你对View进行改变(比如在文本框里写点什么),你的Model也会自动得到更新。

所以说,我们在应用里到底做了什么?

  • ng-app
  • ng-model=“yourName”
  • {{ yourName }}

首先,我们写上了最重要(也是最容易被忘记)的部分:<html>元素的ng-app属性。少了这个属性,AngularJS就没法开始工作。

其次,我们告诉AngularJS,对页面上的“yourName” 这个Model进行双向数据绑定。

第三,我们告诉AngularJS,在“{{ yourName }}”这个指令模版上显示“yourName”这个Model的数据。

就这么多。我们开发了一个动态应用,一个本来要耗费多得多的时间和代码来开发的应用:在这里,我们不需要给双向数据绑定写任何规则,不需要给更新 model和view写任何代码,甚至不需要编写任何model——事实上,我们根本都还没开始碰JavaScript。我们不需要写代码,直到我们想开 发更个性化的应用行为为止。

你会看到,以上种种都是得益于AngularJS强大的设计。

开发你的应用

这个部分我们来看一个应用,我们称它为“myApp”。跟随教程,你可以用git来clone本教程系列的代码库(具体操作方法见下),或者跟着指示自己编写代码。

创建一个index.html文件,内容如下:


  1. <!doctype html>
  2. <htmlng-app="myApp">
  3. <head>
  4. <scriptsrc="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.min.js"></script>
  5. <scriptsrc="js/main.js"></script>
  6. </head>
  7. <body>
  8. </body>
  9. </html>

然后创建文件夹js,再在里面创建文件main.js。所用的git命令如下:


  1. mkdir js
  2. touch js/main.js

这个HTML页面会加载两个JavaScript文件:AngularJS和我们的应用:main.js。我们在这个部分要做的所有工作,几乎都在这个main.js文件里。

为扩展和个性化我们的应用,我们得写点JavaScript代码。所有JS代码,我们都会写在main.js文件里。

angular.module

要定义一个AngularJS应用,我们先得定义一个AngularJS模块(angular.module)。所谓AngularJS模块,其实 就是一系列函数的集合,当应用被启动时,这些函数就会被执行(这个教程系列里,我们还不打算介绍应用的设置和运行部分,这些在以后的教程里会讨论。)

接下来,我们就在main.js文件里来定义我们的AngularJS模块:


  1. varapp=angular.module('myApp', []);

用这行代码,我们创建了叫做“myApp”的AngularJS模块。(现在先不用担心这里的第二个参数――那个空数组[],之后我们会回来讨论它。)

现在我们要在页面上实例化我们的myApp模块,并告诉AngularJS,我们的应用运行在DOM结构的哪一部分。在页面上实例化一个模块,我们使用ng-app这个指令,它的存在告诉AngularJS,我们的模块拥有那一部分的DOM结构。

传入我们应用的名字作为ng-app指令的值,我们就可以在index.html页面上实例化我们的应用(模块):


  1. <htmlng-app="myApp">

刷新页面,现在AngularJS就会引导启动我们的myApp。

我们可以把ng-app设在任何DOM元素上,然后该元素就会成为AngularJS启动运行我们应用的地方。通过这一步,我们就可以在任何页面里写AngularJS应用,即使页面的其他部分并不是用AngularJS写的应用。


  1. <h2>I am not inside an AngularJS app</h2>
  2. <divng-app="embeddedApp">
  3. <h3>Inside an AngularJS app</h3>
  4. </div>

如果一个应用会掌控整个页面,那么你就可以把ng-app指令直接写在html元素上。

定义好了我们的应用,就可以开始创建它的其他部分了。我们会使用$scope来创建,这也是AngularJS最重要的概念之一。我们会在这个七步系列的第二部分深入学习$scope服务。

那么,现在我们已经有了一个AngularJS应用的基本结构,它将成为我们NPR音频播放器应用的起点。

这个新手系列教程代码的git库在这里:https://github.com/auser/ng-newsletter-beginner-series.

要下载这个代码库到本地,首先确保你已经安装了git,然后clone这个git库,check out分支part1:


  1. git clone https://github.com/auser/ng-newsletter-beginner-series.git
  2. git checkout -b part1

七步从Angular.JS菜鸟到专家(1):如何开始相关推荐

  1. 七步从Angular.JS菜鸟到专家(1):如何开始【转】

    七步从Angular.JS菜鸟到专家(1):如何开始[转] AngularJS 重新定义了前端应用的开发方式.面对HTML和JavaScript之间的界线,它非但不畏缩不前,反而正面出击,提出了有效的 ...

  2. 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX

    这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和$scope 的功能. 通过这整个系列的教程, ...

  3. 七步从Angular.JS菜鸟到专家(2):Scopes

    这是"AngularJS - 七步从菜鸟到专家"系列的第二篇. 在第一篇我们展示了如何开始搭建一个Angular应用.在这一篇里,我们要讨论一个理解AngularJS运作原理所必须的基本概念,以及你如 ...

  4. [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]

    这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和 $scope 的功能. 通过这整个系列的教程 ...

  5. 七步走 Angular.js 从菜鸟到专家 (系列列表)

    Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM,统归MDV(model Drive View))JavaScript框架,其是Google推出的S ...

  6. Angular.js为什么如此火呢?

    AngularJS学习列表:七步走 Angular.js 从菜鸟到专家 (系列列表) 上一篇之 后,Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM ...

  7. 七步从AngularJS菜鸟到专家(6):服务

    这是"AngularJS – 七步从菜鸟到专家"系列的第六篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.在第五篇我们讨论了Angular内建的directives.在这一章,我们 ...

  8. 七步从AngularJS菜鸟到专家(4和5):指令和表达式

    这一篇包含了"AngularJS - 七步从菜鸟到专家"系列的第四篇(指令)和第五篇(表达式). 之前的几篇展示了我们应用的核心组件,以及如何设置搭建一个Angular.js应用.在这一部分,我们会厘 ...

  9. [学习笔记] 七步从AngularJS菜鸟到专家(6):服务 [转]

    这是"AngularJS – 七步从菜鸟到专家"系列的第六篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.在第五篇我们讨论了Angular内建的directives.在这一章,我们 ...

最新文章

  1. 爬虫的配置、启动和终止
  2. 使用Java EE的ManagedExecutorService异步执行事务
  3. ReactiveCocoa源码拆分解析(四)
  4. MySQL首次使用Windows_mysql的安装与使用(windows)
  5. int指令02 - 零基础入门学习汇编语言65
  6. java解析xml报文_java 如何解析http请求返回的xml报文
  7. 关于js的引用类型和基本类型
  8. 学习动态性能表 第五篇--V$SESSION
  9. bzoj4332;vijos1955:JSOI2012 分零食
  10. 上海城市坐标系转换的空间校正方法(附控制点文件)
  11. linux卸载xmind,Ubuntu下安装Xmind
  12. tplink的虚拟服务器功能,tplink 虚拟服务器设置
  13. AcWing 4071. 国际象棋
  14. 操作系统-比例份额调度
  15. 公鸡5元每只,母鸡3元每只,小鸡3只1元,100元买一百只鸡多少种办法?
  16. EC智能电池信息读取
  17. 非法指令 (核心已转储) 彻底解决方案
  18. PDF文档如何用关键字精确查找?
  19. PHP教程之实现用户注册实例
  20. 数据结构 树的基本介绍

热门文章

  1. idea base64encoder没有jar包_老师,免费版的IDEA为啥不能使用Tomcat?
  2. python怎么暂停爬虫_python Python爬虫防封杀方法集合
  3. python response.json_Python - Django - JsonResponse 对象
  4. Zookeeper C 回调函数
  5. LeetCode 37 解数独
  6. hdoj4710 规律题
  7. http请求头中Origin的作用及危害
  8. 红蓝对抗之如何利用Shellcode来躲避安全检测
  9. nc个人实战使用总结
  10. C/C++:Windows编程—Inline Hook内联钩子(下)