首页>参考读物>计算机科学与技术>计算机网络

AngularJS深度剖析与最佳实践
作者 : 雪狼 破狼 彭洪伟 编著
丛书名 : 实战
出版日期 : 2016-01-14
ISBN : 978-7-111-52096-2
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 340
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

AngularJS是全新的、功能强大的客户端技术,提供一种强大的构建动态Web应用设计结构框架,通过扩展HTML的语法,让开发者能更清楚、简洁地构建应用组件。本书作者基于丰富的开发经验,总结AngularJS开发的技术要点与最佳实践。本书从一个基本案例开始入手,介绍AngularJS基本概念、基本理论、相关工具、部署、调试、常见开发问题与最佳实践方式。包含大量示例代码与说明,单刀直入,简单明了,实用性强,对各类Web开发人员都具有参考价值。

图书特色

深入讲解AngularJS的基本概念及其背后的原理,包括完整的开发框架与最佳实践。
不仅抽丝剥茧地展现了AngularJS的诸多特性与技巧,还讲解了工程实践中容易陷入的“坑”,是从小工走向专家的必备参考。

在前端开发中,如何弥补语言的先天不足?如何干净漂亮地解耦?如何设计“小而美”的类/代码块?对于一个“极客”来说,总是要用一些漂亮的技术来解决这些问题,而Angular当之无愧是这类技术之一。本书深入讲解AngularJS的基本概念及其背后的原理,包括完整的开发框架与最佳实践,从最初的框架搭建开始,快速迭代,逐步丰富项目的骨肉,并在这个过程中展现AngularJS的诸多特性与技巧,内容由浅入深、讲解细腻、实战性强,是从AngularJS的小工走向专家的必备参考。

主要内容:
从实战开始,通过实战演练逐步带领读者体验Angular的开发过程,并随着进度的推进,引入所需的技术和概念。
介绍一些基本概念是什么,为什么,怎么用,什么时候用,什么时候不用等。
AngularJS中的MVVM模式、启动过程、脏检查机制、指令生命周期等。
AngularJS最佳实践,如前后端分离部署、如何设计友好的REST API、移除不必要的$watch、用打包代替动态加载等。
AngularJS开发技巧与实战中的“坑”,如表单验证错误信息显示、Angular中的AOP机制、在代码中注入Filter、动态绑定HTML等。

雪狼 资深前端架构师,热爱技术,热衷编程,16年来从未中断。涉足的软件开发领域从桌面软件到Web应用,涵盖翻译软件、通讯软件、安全软件、企业级系统等。他还是AngularJS中文社区管理员,在社区分享了大量技术文章,受到读者的好评与称赞。

破狼 ThoughtWorks一线码农,高级架构师、咨询师国内Angular最早布道者之一,ngnice、ngShowCase创建人之一。Angular中文社区“狼主”,全栈攻城狮,个人独立博客是:http://greengerong.com/,同时也运维了一个前端微信公众号“shuang_lang_shuo”。

彭洪伟 ThoughWorks 一线码农,Angular 早期使用者,ngnice 的早期贡献者之一。除了前端技术,对 Java、Scala、Ruby 等也均有涉猎,并且翻译了构建工具 SBT 的文档。

图书前言

新时代
新挑战
时代已经不同了!
17年前,当我的第一个作品推入市场的时候,互联网才刚刚传入中国。
那时候的软件不需要联网,每个用户也不需要知道其他用户的存在。
那时候只需要考虑PC运行环境,而需要考虑的屏幕分辨率也只有区区三种。
那时候的软件项目组多则十几人,少则一人,而发布周期常常会达到半年之久。
现在,一切都不同了。
现在,连一个手机电筒软件都在偷偷联网,不能联网的游戏也已经是老古董的代名词。
现在,软件不但运行在PC上,还要运行在智能手机上,运行在各种Pad上,屏幕分辨率更是多到让研发和测试工程师发怵的地步。
现在,外界看到的产品其实只是冰山一角,它背后还有很多子系统紧密协作来提供支持,需求和架构的复杂度也暴增。
但最大的挑战恐怕还是来自发布周期—一期版本在一个月内上线已是常态,而修复bug的时间限制则往往以小时计,甚至以分钟计。
没错,这些都是新的挑战!好在,我们也有了新技术!
新技术
这17年间,软件业最大的技术革命,当然首推互联网。
互联网不但拓展了软件业的业务范围,更改变了程序员获取知识和解决问题的方式。
如今,一个不会Google(以及翻墙),没上过GitHub,不知道Stackoverflow的程序员很难想象会有什么发展空间。
排在第二位的技术革命,当推移动互联网以及智能终端。这场革命不但把曾经的王者诺基亚打落凡尘,而且让苹果重新登上王位。
这两场技术革命让开源运动遍地开花,更催生了无数的新技术。
且不提HTTP/HTML/JavaScript/CSS这些耳熟能详的互联网基石,就连在互联网革命爆发之前已经就已经相当成熟的OO领域也有了很大的进展。
以MVC为例,它不但衍生出MVP、MVVM等很多变种,而且从后端领域扩展到了前端领域。而现在日益火爆的Angular,正是MVC在前端领域的代表作之一。
一个“极客”总是痴迷于各种“漂亮”的技术,而Angular当之无愧地是其中之一,它可供借鉴的地方很多:
如何弥补语言的先天不足。
如何干净漂亮地解耦。
如何设计“小而美”的类/代码块。
所以,即使你还没有下决心把Angular应用到项目中,也可以在学习Angular的过程中获得一些启迪,帮助你重构现有项目。
面对技术的快速进步,有人会感到恐慌,有人会盲目地追踪一切新技术,而真正的极客会看到“新”技术中那些“不变”的元素,会在“新挑战”中看到“新机遇”,并且把握。
新机遇
一方面出现了前所未有的挑战,另一方面出现了前所未有的技术,这样的机遇并不多,“极客”们欢呼雀跃。
对于公司,它将影响产品形态、开发速度和产品品质,也会对团队的组织架构带来改变。比如,伴随着设备的多样化,网络服务的访问入口变得多样化:不但需要有供电脑访问的网站,还需要供手机访问的网站、供Pad访问的网站,对于一些追求极致用户体验的公司来说,还会提供给安卓设备用的App、给苹果设备用的App。
作为开发人员,也许你会看到或正在经历一个工作量暴增的时代,但是,不要紧张,事情没那么坏。在新时代,有一项重要且迅速成长的技术革新,那就是“前后端分离架构”,它可以有效遏制工作量的暴增。“前后端分离架构”正是伴随着“前端MVC”的成长而成长的。
它的原理很简单:虽然多出了很多访问入口,但是其背后的业务逻辑并没有本质性变化,那么,我们是否可以让这一套业务逻辑为多种不同形态的终端服务呢?答案是肯定的,那就是让后端只提供跟业务逻辑紧密相关的那部分API,而用户交互等非核心逻辑则交给前端程序来完成。
这样,我们的工作量并不会成倍增长,而是可以先着重开发一个版本,让后端API和一种形态的前端应用变得成熟,然后再去开发其他形态的前端应用。而这些其他形态的前端程序的工作量和风险都比较容易得到控制。
但是,根据康威定律,在新的程序架构下,项目的组织架构甚至整个公司的组织架构都将发生相应的变化,而最显著的变化就是出现了专门的前端工程师。前端工程师往往不是零基础开始的,一小部分来自原来负责切图或写JavaScript特效的工程师,不过大部分是从以前开发Web应用的程序员转型而来的。
无论对于公司还是个人,“前端MVC”以及相应的“前后端分离架构”都是一个新的机遇。不思进取的王者终会没落,勤奋好学的新星将会崛起,希望本书能有幸成为你的助力。
致读者
写给想转职或兼修前端的Web工程师
本书面向的读者,第一大群体是Web工程师。“前后端分离架构”出现之前,在大多数Web应用中,无论是核心的业务逻辑,还是表现层的交互逻辑,都是完全运行在服务端的。写这类程序的程序员就是这里所说的Web工程师。
随着“前后端分离架构”的普及,原来的开发方式将主动或被迫转变。本书将通过实例引导你完成到“前后端分离架构”的思维转变,以及与此相关的技术。
如果你是个Web工程师,在读本书的时候请留意用户交互逻辑是如何完全移交给前端程序的,而后端程序又做了哪些精简,特别要注意体会模块职责的单一化、专业化趋势。
对于部分转职过来的Web工程师,除了转换思维以外,还有一大挑战是前端庞杂的知识体系:HTML/CSS/JavaScript/前端工具链/浏览器兼容性等,每一个领域都相当庞大。
在本书中,我们无法对此展开讲解,但这些知识对于做实际项目又是必需的。所以,我们只能在附录中提供一些重要的技术要点和“坑”,并且给出一些在线学习资源和书单。这些大部分都是从我们开展培训时所使用的课件改编而来的,具有很强的实战性、实用性。希望可以为你提供一些第三方资料,作为进一步学习的起点。
写给想进阶为专业前端的切图师
在很多开发组中,切图师往往由初级程序员或美工担任,有没有想过自己将来向哪里发展?除了面向对象、项目管理等必学的基础技能之外,还可以学习数据库、后端框架、安全技术等,转职为后端工程师。也可以学习HTML/CSS/JavaScript、用户体验、交互设计、前端框架等,转职为前端工程师。
当然,如果你足够聪明和有足够的进取心,你也可以两者兼修,成为一名全栈工程师。不过,相对来说,前端这条路径可能更加平缓。而且,这几年前端职位正逐渐火爆,从个人职业发展来说,这也是个不错的选择,过一段时间后未必再有这样好的机遇。从切图师到前端,这条路并非荆棘重重。事实上,没有传统Web工程师的思维定势,这反倒会是个优点。在笔者的编程、咨询和教学过程中,曾接触过一些对Angular感兴趣的人,总体上说,转变思维比导入新思维的难度更大。圈子里还常流传一些无稽之谈,比如,Angular是Google开发的,面向的是Google中那些妖怪级程序员。那都是乱传的,没那么恐怖。
我写下这些,是希望你们可以轻装上阵,Angular的很多设计都是遵循“最小意外”原则的,靠直觉就可以掌握,“高估难度”有害无益。
不过,难度仍然是有的。读本书之前,你至少应该已经熟悉了JavaScript语法,对Angular的各种概念有了大致的了解。如果你对很多新名词不知所云,那么建议先去翻阅一下附录中的书籍,浏览一下网上关于Angular入门的文章。
对于切图师来说,MVC方面的基础往往会成为短板,而JavaScript中一些诡异的特性也常常带来困扰。所以,本书会穿插一些这方面的简短知识。但是,对于一个立志成为“极客”的初级程序员来说,这仍然是不够的,所以,在附录中我们还提供了一些网址和书单,希望本书能帮你开启职业生涯的新阶段。
2.0要来了,本书会过时吗?
Angular 2.x已经进入了Alpha测试阶段,那么,不免有人担心,等到2.x推出的时候,本书会过时吗?从实现细节上来讲,会的。从思想上来讲,不会。从实用性上来讲,不会。
1.x和预计2016年推出的2.x在语法甚至一些底层实现上是截然不同的。
据目前得到的消息,2.x将使用TypeScript和ES6作为主体语言,那时候,本书的很多代码将不再适用于2.x。而由于2.x彻底抛弃了IE11之前的低版本浏览器,它可以借助最新的浏览器特性进行底层实现,不用为了向后兼容而使用“脏检查”等技术来弥补浏览器的不足。在这些细节上,1.x和2.x几乎没有共通之处。这一点一直被人诟病,也是一些人对Angular的前途深表担忧的原因。不过,从另一个角度来看,2.x的这种改进也是一种勇敢的改革,可以让它轻装前进,更有利于长远发展。
好消息是,2.x不是1.x的替代品。官方已经宣布,即使2.x推出,也仍然会对1.x进行长期维护。这就有点类似于Query 2.x不再兼容IE8,而Query 1.x仍然兼容IE8并继续向前发展一样。这种版本策略可以防止Angular背上向老旧浏览器兼容的包袱。
1.x和2.x在编程模型上并没有太大的差异,它们都基于MVVM模型,都具有双向绑定功能(即使底层实现方式已经变了),都具有相同的设计哲学—利用高内聚的小模块组合出最终程序。而这些在我们的书中都有所体现。在目录结构、指令的分类等方面,本书也从2.x中引入了很多更好的实践。
从实用性上来说,本书更不会过时。2.x的浏览器兼容性起点就是IE11,这不是因为细节层面的问题,而是从底层原理上就不可能—它依赖太多的新特性。而在国内市场上,彻底抛弃IE11以下的版本恐怕还会是一个长期的历程—即使最乐观的估计,至少也需要两年。当然,手机端的浏览器版本更新要快得多,所以,预计2.x最早会被用在手机版上。
固然,2.x是个高大上的版本,但目前在国内还是个屠龙之术。如果要在现实中使用,还是先学好1.x吧。按照本书的指引,你可以提前领略2.x的优点,而不用付出兼容性的代价。当然,等本书的2.x版推出时,这种熟悉的味道也会让你有一个更高的起点。
阅读指南
Angular的学习曲线大概是这样的:入门非常容易,中级的时候会发现需要深入理解很多概念,高级的时候需要掌握Angular的工作原理,而想成为专家则很难,需要经过很多工程实践的磨练。
本书的主体结构也是针对这样的学习曲线设计的。
首先,初级阶段,实战演练
我们会带你在实战中逐步体验Angular的开发过程,并随着进度的推进,逐步引入所需的技术和概念。
然后,中级阶段,概念介绍
在实战中提到的一些概念不会就地展开,而是只做简介,到了这个阶段,会对概念进行深入讲解:是什么,为什么,怎么用,什么时候用,什么时候不用等。
接下来,高级阶段,工作原理
学习了这些概念,我们还要把它们串起来,向你揭示Angular的工作原理,看看这些概念之间是如何协作的。
最后,专家阶段:最佳实践,技巧
前面主要是入门和理论,而这部分将主要以实战经验为主。
只把Angular用熟了是不够的,我们还要把它整合进更宏观的开发过程中,不但要考虑开发,更要考虑维护。我们要如何开发容易维护的Angular程序?请看第4章。
专家还需要掌握一些技巧去把复杂问题简单化,发掘一些不常用但很有用的API,把看起来平淡无奇的框架特性运用得出神入化,第5章将集中展现这一点。

在前面的章节中零零散散提到了一些需要注意的地方,但是这样不方便查阅,所以我们把需要注意的地方作为独立的一大章,把我们帮别人解决过的一些典型问题收集在一起。当然,我们也会在读者社区继续维护并更新这些“坑”,而不是等再版时才发布。我们希望能把这本书做成“活的”,让这本书更加物超所值,不辜负读者对我们的信任。
工具
工欲善其事,必先利其器。充分发挥工具的力量是开发人员的重要素质,日常用到的工具你真的用熟练了吗?有没有更好的工具?我们会把实战中觉得对自己帮助最大的工具及其使用经验分享给你。
更多
在实战中,有很多需求是不显眼但很重要的,比如SEO、访问统计等,在实际项目中,这些往往是不能忽视的。我们会专门通过一章来讲解如何结合Angular和第三方软件干净漂亮地解决这些问题。
Hybrid应用和手机Web越来越普及,手机版开发的需求也越来越高,在Angular的基础上,开发手机版变得容易多了。而且,也已经有了比较成熟的工具和框架,我们会简要讲解一下手机版开发的方法和框架。
附录
软件开发需要很多综合技能,但本书容量有限,我们也不可能是每个领域的专家。因此,我们会“授人以渔”,给出一些在线资源和书单,供大家深入学习或作为备查资料。
关于随书代码
书中所摘录的只是全部代码的一小部分,大部分代码都放在了GitHub上。地址是https://github.com/ng-nice/code。
如果你查看GitHub历史,会发现总的提交数并不多。这是因为要方便教学,所以在提交前进行了合并。所保留的这些提交大都和书中的主要进度有关,略去了细节提交。所以,本书中代码的提交粒度不能代表实际项目中的提交粒度,在实际项目中,其提交粒度通常比本书中所示范的更小。阅读代码时请记住这一点,以免养成“大粒度提交”的坏习惯。
另外,文中的JavaScript代码(包括摘引的Angular源码)全都使用了两格缩进模式,这主要是考虑到图书排版问题,希望少一些不必要的换行。你们在现实项目中愿意用两格或四格均可,只要项目组内保持一致即可。
关于内容的重复
仔细阅读,可能会发现有些内容会在多个不同的章节中重复讲解,这当然不是凑字数,而是尽可能符合人的记忆规律—把重要的内容在不同的场景下重复,对于深入掌握重点是很有帮助的。
关于写作风格
这是一本多人协作的书,虽然我们进行了后期统稿,但在语言风格等方面仍难免会有不一致的地方,我们期待你们的反馈,以便将来改进。
你的好,我永远记得!
双狼的感恩
双狼的本次合作起于机械工业出版社编辑吴怡的邀请。作为ThoughtWorks的Tech Lead,双狼都有很多工作任务,原定6个月的写书计划,被拖到了8个月,感谢吴怡的耐心与推动。
还有很多ThoughtWorker为本书做出了贡献:
张逸,资深ThoughtWorker,很多技术书籍的作者或译者。一直在鼓励我们,并给了我们很多帮助。
彭洪伟,本书的第三作者。在交稿压力最大的时候,承担了“工具”篇的撰写工作,保障了本书的尽早交稿。
陈嘉,幕后的贡献者,全栈式工程师。帮我们设计了“双狼说”微信公众号的Logo,从技术的角度帮我们审稿,并提了一些非常有用的建议。
还有很多ThoughtWorker和社区朋友帮助我们从技术层面和语言层面进行修改。他们有的是Angular专家,有的是新手,给了我们比较全面的反馈。能将枯燥、乏味的技术平易近人地展现在这本书中,一定要感谢他们所作出的奉献。他们是(排名不分先后):冯尔东、朱本威、李科伟、杨琛、彭琰、叶志敏、ng群as。
还要感谢Angular中文社区QQ群和关注“双狼说”微信号的网友们,是你们的鼓励给了我们写作的信心和动力!
雪狼的感恩
开始写书的时候,刚刚认识我的女友娜娜,今天,我们即将走进婚姻的殿堂。我这样一个负情商的程序员,生活有多么枯燥乏味,不问可知。感谢你点亮了我的人生。你的好,我永远记得!
能专注开发17年,要感谢我父母和弟弟的支持。人到中年,本应是最纠结的时代,特别是我这样的前“单身狗”。我无法经常回家,是弟弟经常回去探望父母。父母的乐观与健康,让我可以心无旁骛地工作。你们的好,我永远记得!
能走入软件开发这一行,要感谢我的伯乐何战涛和王勇的帮助。还记得那个沉默而不自信的“小汪”吗?当初,他什么也不会,犯过很多错误;如今,他在尽力为别人的职业生涯提供帮助。你们的好,我永远记得!
在这17年间,我尝试过很多角色,从写文档、测试到小公司的CTO,走过了丰富多彩的人生。特别需要感谢的是林先生和余姐等前同事,我们追随林先生走过8年创业之旅,这一过程让我具备了更开阔的视野和更坚韧的性格。虽然因为生活压力不得不离开,但,你们的好,我永远记得!
最后,感谢ThoughtWorks!作为“敏捷”的倡导者,ThoughtWorks处处体现着敏捷思想,这是一个把“敏捷”变成“文化”并渗透到骨子里的公司。这是一个很“奇葩”的公司。这一点从“全球CEO和中国区程序员撞衫”事件就可见一斑。这是一个很“简单”的公司。引用我们一位HR的说法:“进了ThoughtWorks,我感觉自己的情商都下降了!”这是一个很“技术”的公司。每年两期的技术雷达都来自全球近3000名工程师的实践总结。这里几乎会涉足每一项前沿技术:大数据、React、Scala等。仅以Angular为例,我们在工程实践中使用它是在4年前,那时候Angular还是0.6版呢。
还差一句话就变成招聘软文了,索性补上吧:ThoughtWorks,你的好,进来才知道!
破狼的感恩
在写作本书之际,我作为ThoughtWorks高级敏捷咨询师、架构师,因为项目曾辗转多地,没有太多时间投入到这次的写作之中。在此之前,已经有很多的出版社联系我写本国人自己的深度解析Angular的书籍,但都被我婉言拒绝了。直到雪狼告诉我他希望写一本关于Angular的书籍的时候,恰巧吴怡编辑也跟我提起了写书的事。这次我们应承下来了。在这里首先感谢吴怡的知遇之情和写书过程之中的包容与耐心。还有雪狼大叔的最终推动。
我是一个具有承诺“强迫症”的人,一旦应承下来的事情,我就会尽自己最大的努力把它做好。特别在快截稿的几个月里,每天写作到凌晨1~2点,次日还需要准备与客户7∶00的站会。和老婆结婚已经一年多了,可是由于工作原因,我也出差在外一年多了。加上写作此书的时候,连陪伴父母和老婆的时间也被我挤出来写作本书了。所以在此,首先要感谢我的父母和老婆,感谢你们的支持和包容,在这本书的背后也包含着你们对我的一份宝贵的爱。爸妈、老婆:我也爱你们!
还要感谢我大学的导师刘继光老师和柳翠寅老师,是你们让我学到了软件开发的技能,以及帮我寻找到一份实习的机会,给了我比别人多3年的实战机会,因此我才能独自闯荡成都这座大城市,并开始了软件开发之路。还有你们对知识的追求和坚强的毅力,深深感染了我。至此坚持了6年多的博客写作和回馈开源社区,因此才有了本书的顺利完成。你们是我一辈子的良师益友,谢谢你们的付出!
同时还要感谢我在ThoughtWorks的同事们。是我的Sponsor张逸一直鼓励我写书,是熊节每年的阅读数量激励我更加坚定地持续获取更多的知识来武装自己。还有很多的twer,同样在这里感谢你们长久以来对我的帮助和鼓励。
我常常告诉自己:要么读书,要么旅行,身体和心灵总有一个在路上。与君共勉。
彭洪伟的感恩
首先,我要感谢我父母!即使是在家境最困难的时候,他们也时时刻刻鼓励我、支持我,让我能坚持走自己的路。
我第一次接触到计算机是在2003年。那时刚上初中,正是CS和传奇火爆的时候,想自己申请一个QQ号都感觉很困难。直到2006年初中毕业,莫名其妙地开始了信息学奥林匹克竞赛的培训之路,用C语言写出了人生的第一行Hello World代码。
感谢张宗弋老师的悉心教导和高中三年对C语言、算法、图论、数论的培训,还记得大家都叫您小弋(误读作:Ge)子。是您激发了我的“程序员梦”。以至于后来在报志愿的时候,第一志愿写的都是计算机信息科学与技术,虽然那时候并不知道这个专业是干什么的。
在大学里,特别要感谢的是邓芳老师,是您鼓励我们,除了学好课堂上的东西,更要积极去探索自己感兴趣的东西。您“授人以鱼,不如授人以渔”的教学思想,让我逐渐养成了自学的习惯,至今让我受益匪浅。后来,您帮我引荐了两位让我受益良多的导师:陈宇副教授和王海军副教授。是他们把我带到了物联网的领域,让我对计算机的领域产生了更浓厚的兴趣。三位老师的指引,让我接触到了更多课堂上没有的东西,终于有幸加入ThoughtWorks这个大家庭中。
在这里,我认识了有黑客范儿的马伟和段子手Jojo(周哲武),是他们给了我建设性的意见,让我感觉到了ThoughtWorks 的不同。不得不提的还有Jojo帮我推荐的Sponsor—破狼,是他不断地在开源的世界里给我指出新机会,鼓励我大胆尝试。不然我也不能坚持翻译完Scala构建工具SBT:http://www.scala-sbt.org/0.13/tutorial/zh-cn/index.html的使用文档。如果没有破狼的引荐,我也不会认识前端牛人雪狼和参与本书的编写。
最后,如果没有未婚妻韩盼盼的爱、支持与鼓励,我也难以完成这么多富有挑战性的工作。谢谢,我爱你!

上架指导

计算机\Web开发

封底文字

在前端开发中,如何弥补语言的先天不足?如何干净漂亮的解耦?如何设计“小而美”的类/代码块?对于一个“极客”来说,总是要用一些漂亮的技术来解决这些问题,而Angular当之无愧的是其中的技术之一。本书深入讲解AngularJS的基本概念及其背后的原理,包括完整的开发框架与最佳实践,从最初的框架搭建开始,快速迭代逐步丰富项目的骨肉,并在这个过程中展现AngularJS的诸多特性与技巧,内容由浅入深、讲解细腻、实战性强,是从AngularJS的小工走向专家的必备参考。

主要内容:
? 从实战开始,通过实战演练逐步带领读者体验Angular的开发过程,并随着进度的推进,引入所需的技术和概念。
? 介绍一些基本概念是什么,为什么,怎么用,什么时候用,什么时候不用等。
? AngularJS中的MVVM模式、启动过程、脏检查机制、指令生命周期等。
? AngularJS最佳实践,如前后端分离部署、如何设计友好的REST API、移除不必要的$watch、用打包代替动态加载等。
? AngularJS开发技巧与实战中的“坑”,如表单验证错误信息显示、Angular中的AOP机制、在代码中注入Filter、动态绑定HTML等。

作者简介

雪狼 破狼 彭洪伟 编著:暂无简介

图书目录


前 言
第1章 从实战开始1
1.1 环境准备1
1.2 需求分析与迭代计划3
1.3 创建项目11
1.3.1 Yeoman11
1.3.2 FrontJet13
1.4 实现第一个页面:注册18
1.4.1 约定优于配置18
1.4.2 定义路由19
1.4.3 把后端程序跑起来24
1.4.4 连接后端程序26
1.4.5 添加验证器28
1.4.6 “错误信息提示”指令31
1.4.7 用过滤器生成用户友好的提示
   信息33
1.4.8 实现自定义验证规则34
1.4.9 实现图形验证码36
1.5 实现更多功能:主题38
1.5.1 实现主题列表38
1.5.2 实现过滤功能40
1.5.3 实现分页功能42
1.5.4 实现主题树44
1.5.5 实现递归主题树56
1.5.6 实现“查看详情”功能58
1.6 实现AOP功能59
1.6.1 实现登录功能60
1.6.2 实现对话框65
1.6.3 实现错误处理功能67
1.7 实战小结68
第2章 概念介绍70
2.1 什么是UI70
2.2 模块71
2.3 作用域72
2.4 控制器73
2.5 视图74
2.6 指令75
2.6.1 组件型指令76
2.6.2 装饰器型指令79
2.7 过滤器81
2.8 路由82
2.9 服务83
2.9.1 服务85
2.9.2 工厂86
2.10 承诺88
2.11 消息92
2.12 单元测试93
2.12.1 MOCK的使用方式94
2.12.2 测试工具与断言库95
2.13 端到端测试96
第3章 背后的原理98
3.1 Angular中的MVVM模式98
3.2 Angular启动过程102
3.3 依赖注入106
3.3.1 什么是依赖注入106
3.3.2 如何在JavaScript中实现DI107
3.3.3 Angular中的DI108
3.3.4 DI与minify109
3.4 脏检查机制110
3.4.1 浏览器事件循环和Angular的MVW110
3.4.2 Angular中的$watch函数111
3.4.3 Angular中的$digest函数113
3.4.4 Angular中的$apply116
3.5 指令的生命周期117
3.5.1 Injecting118
3.5.2 compile和link过程120
3.6 Angular中的$parse、$eval和$observe、$watch122
3.6.1 $parse和$eval122
3.6.2 $observe和$watch124
3.6.3 使用场景125
3.7 REST127
3.7.1 REST的六大要点128
3.7.2 REST的四个级别130
3.8 跨域131
3.8.1 同源策略与跨域131
3.8.2 如何解决跨域问题132
3.9 前端安全技术133
3.9.1 前端攻击的基本原理和类型133
3.9.2 前端安全与前后端分工136
3.9.3 移动时代的特殊挑战137
3.9.4 安全无止境138
第4章 最佳实践140
4.1 调整开发协作流程140
4.2 前后端分离部署143
4.3 样式中心页144
4.4 CSS的扩展语言与架构145
4.5 HTML的表意性146
4.6 table,天使还是魔鬼148
4.7 测试什么?怎么测?150
4.7.1 准备工作150
4.7.2 如何测试Controller151
4.7.3 如何测试Service151
4.7.4 如何测试Filter152
4.7.5 如何测试组件型指令152
4.7.6 如何测试装饰器型指令153
4.7.7 如何测试网络请求153
4.7.8 如何测试setTimeout类功能153
4.7.9 如何Mock Service154
4.8 如何设计友好的REST API155
4.8.1 URI155
4.8.2 资源拆分155
4.8.3 资源命名155
4.8.4 方法156
4.8.5 返回值157
4.8.6 综合案例:分页API159
4.9 使用controller as vm方式160
4.9.1 源码分析161
4.9.2 推荐用法和优势161
4.9.3 路由中的controller as语法162
4.9.4 指令中的controller as语法163
4.10 移除不必要的$watch163
4.10.1 双向绑定和watchers函数164
4.10.2 其他指令中的watchers函数166
4.10.3 慎用$watch和及时销毁167
4.10.4 one-time绑定168
4.10.5 滚屏加载170
4.10.6 其他171
4.11 总是用ng-model作为输出172
4.12 用打包代替动态加载173
4.13 引入Angular-hint173
4.13.1 通过batarang插件使用angular-hint174
4.13.2 手动集成angular-hint174
4.13.3 Module hints175
4.13.4 Controller hints176
4.13.5 Directive hints176
第5章 Angular开发技巧178
5.1 $timeout的妙用178
5.2 ngTemplate寄宿方式182
5.3 在非独立作用域指令中实现scope绑定185
5.4 表单验证错误信息显示186
5.5 Angular中的AOP机制187
5.5.1 拦截器案例188
5.5.2 拦截器源码分析192
5.5.3 Angular中的装饰器195
5.5.4 Angular装饰器源码分析197
5.6 Ajax请求和响应数据的转换198
5.6.1 兼容老式API198
5.6.2 Ajax请求配置的源码分析201
5.7 在代码中注入Filter205
5.7.1 复用指定Filter205
5.7.2 重用多个Filter案例206
5.7.3 Filter源码分析207
5.8 防止Angular表达式闪烁208
5.8.1 表达式闪烁解决方案208
5.8.2 ngCloak源码分析208
5.8.3 最佳实践209
5.9 实现前端权限控制209
5.9.1 事件方案210
5.9.2 resolve方案211
5.10 依赖注入—$injector214
5.10.1 $injector的创建214
5.10.2 $injector注入方式215
5.10.3 $injector的妙用217
5.11 在指令中让使用者自定义模板219
5.12 跨多个节点的ng-if或ng-repeat223
5.13 阻止事件冒泡和浏览器默认行为224
5.14 动态绑定HTML226
第6章 Angular常见的“坑”229
6.1 module函数的声明和获取重载229
6.2 ngModel绑定值不更改232
6.2.1 验证引起的model值不显示233
6.2.2 原型链继承问题235
6.3 指令不生效239
6.4 Angular中锚点的使用240
6.5 ngRepeat验证失效241
6.5.1 简单的验证显示242
6.5.2 复杂的验证显示242
6.6 有些指令需要唯一的根节点243
6.7 指令优先级-Priority243
6.8 ngRepeat报重复内容错误244
6.9 单元测试中promise不触发245
第7章 编码规范247
7.1 目录结构248
7.1.1 按照类型优先、业务功能其次的组织方式248
7.1.2 按照业务功能优先、类型其次的组织方式249
7.2 模块组织250
7.2.1 命名250
7.2.2 Module声明250
7.2.3 依赖声明251
7.2.4 Module组件声明251
7.3 控制器252
7.3.1 命名252
7.3.2 ControllerAs vm声明252
7.3.3 初始化数据253
7.3.4 DOM操作253
7.3.5 依赖的声明253
7.3.6 精简控制器逻辑254
7.3.7 禁止用$rootScope传递数据255
7.3.8 格式化显示逻辑255
7.3.9 Resolve255
7.4 服务256
7.4.1 命名256
7.4.2 代码复用256
7.4.3 使用场景256
7.4.4 Service返回值257
7.4.5 缓存不变数据257
7.4.6 RESTful257
7.5 过滤器258
7.5.1 命名258
7.5.2 重用已有Filter258
7.5.3 禁止复杂的Filter258
7.6 指令259
7.6.1 命名259
7.6.2 Template声明259
7.6.3 link函数的scope参数命名259
7.6.4 pre-link和post-link260
7.6.5 DOM操作260
7.6.6 Directive分类260
7.6.7 Directive不是封装jQuery代码“天堂”260
7.6.8 自动回收261
7.7 模板261
7.7.1 表达式绑定261
7.7.2 Src、Href问题261
7.7.3 Class优于Style262
7.8 工具262
7.9 其他264
7.9.1 内置$服务替代原生服务264
7.9.2 Promise解决回调地狱264
7.9.3 减少$watch265
7.9.4 TDD265
第8章 工具267
8.1 WebStorm与IntelliJ267
8.2 Chrome269
8.3 Gulp273
8.4 Swagger274
8.4.1 前后端分离274
8.4.2 Swagger275
8.4.3 契约测试277
8.5 TSD277
8.6 Postman280
8.6.1 安装280
8.6.2 功能介绍280
第9章 杂项知识282
9.1 Angular 2.0282
9.2 SEO284
9.3 IE兼容性287
9.3.1 问题概述287
9.3.2 问题分类288
9.4 访问统计292
9.5 响应式布局293
9.6 国际化294
9.7 动画296
9.7.1 CSS动画296
9.7.2 JavaScript动画297
9.8 手机版开发298
9.8.1 Hybrid应用298
9.8.2 Ionic300
附录A 相关资源301
后记 提问的智慧318

教学资源推荐
作者: 秦品乐 李正 曾建潮 柴锐 苗启广 编著
作者: 毛羽刚 蔡开裕 陈颖文 编著
作者: 陈鸣 李兵 雷磊 编著
作者: [美]拉里·L. 彼得森(Larry L. Peterson),[美]布鲁斯·S. 戴维(Bruce S. Davie) 著
参考读物推荐