{{sellerTotalView > 1 ? __("sellers", {number: sellerTotalView}) : __("seller", {number: sellerTotalView}) }}, {{numTotalView > 1 ? __("items", {number: numTotalView}) : __("item", {number: numTotalView}) }}
免运费
Yami

Nickname

请告诉我们怎么更好地称呼你

更新你的名字
账户 订单 收藏
{{ inviteNavTitle }}
退出登录

切换配送区域

不同区域的库存和配送时效可能存在差异.

历史邮编

{{email ? __('Got it!') : __('Restock Alert')}}

我们将在商品到货后第一时间通知你。

取消
Yami

京东图书

AngularJS深度剖析与最佳实践

{{buttonTypePin == 3 ? __("Scan to view more PinGo") : __("Scan to start")}}

AngularJS深度剖析与最佳实践

{{__(":people-members", {'people': item.limit_people_count})}} {{ itemCurrency }}{{ item.valid_price }} {{ itemCurrency }}{{ item.invalid_price }} {{ itemDiscount }}
后结束
{{ itemCurrency }}{{ item.valid_price }}
{{ itemCurrency }}{{ priceFormat(item.valid_price / item.bundle_specification) }}/{{ item.unit }}
{{ itemDiscount }}
{{ itemCurrency }}{{ item.valid_price }} {{ itemCurrency }}{{ priceFormat(item.valid_price / item.bundle_specification) }}/{{ item.unit }} {{ itemCurrency }}{{ item.invalid_price }} {{itemDiscount}}
{{ itemCurrency }}{{ item.valid_price }}
后结束促销
后开始秒杀 后结束秒杀
{{ getSeckillDesc(item.seckill_data) }}
{{ __( "Pay with Gift Card to get sale price: :itemCurrency:price", { 'itemCurrency' : itemCurrency, 'price' : (item.giftcard_price ? priceFormat(item.giftcard_price) : '0.00') } ) }} ({{ itemCurrency }}{{ priceFormat(item.giftcard_price / item.bundle_specification) }}/{{ item.unit }}) 详情
商品有效期

已下架

当前地址无法配送
已售完

商品描述

展开全部描述
内容简介

在前端开发中,如何弥补语言的先天不足?如何干净漂亮地解耦?如何设计“小而美”的类/代码块?对于一个“极客”来说,总是要用一些漂亮的技术来解决这些问题,而Angular当之无愧是这类技术之一。本书深入讲解AngularJS的基本概念及其背后的原理,包括完整的开发框架与实践,从最初的框架搭建开始,快速迭代,逐步丰富项目的骨肉,并在这个过程中展现AngularJS的诸多特性与技巧,内容由浅入深、讲解细腻、实战性强,是从AngularJS的小工走向专家的必备参考。
主要内容:
从实战开始,通过实战演练逐步带领读者体验Angular的开发过程,并随着进度的推进,引入所需的技术和概念。
介绍一些基本概念是什么,为什么,怎么用,什么时候用,什么时候不用等。
AngularJS中的MVVM模式、启动过程、脏检查机制、指令生命周期等。
AngularJS实践,如前后端分离部署、如何设计友好的REST API、移除不必要的$watch、用打包代替动态加载等。
AngularJS开发技巧与实战中的“坑”,如表单验证错误信息显示、Angular中的AOP机制、在代码中注入Filter、动态绑定HTML等。
作者简介

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

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

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


前言
第1章从实战开始1
1.1环境准备1
1.2需求分析与迭代计划3
1.3创建项目11
1.3.1Yeoman11
1.3.2FrontJet13
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.1MOCK的使用方式94
2.12.2测试工具与断言库95
2.13端到端测试96
第3章背后的原理98
3.1Angular中的MVVM模式98
3.2Angular启动过程102
3.3依赖注入106
3.3.1什么是依赖注入106
3.3.2如何在JavaScript中实现DI107
3.3.3Angular中的DI108
3.3.4DI与minify109
3.4脏检查机制110
3.4.1浏览器事件循环和Angular的MVW110
3.4.2Angular中的$watch函数111
3.4.3Angular中的$digest函数113
3.4.4Angular中的$apply116
3.5指令的生命周期117
3.5.1Injecting118
3.5.2compile和link过程120
3.6Angular中的$parse、$eval和$observe、$watch122
3.6.1$parse和$eval122
3.6.2$observe和$watch124
3.6.3使用场景125
3.7REST127
3.7.1REST的六大要点128
3.7.2REST的四个级别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.4CSS的扩展语言与架构145
4.5HTML的表意性146
4.6table,天使还是魔鬼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.1URI155
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.4one-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.3Module hints175
4.13.4Controller hints176
4.13.5Directive hints176
第5章Angular开发技巧178
5.1$timeout的妙用178
5.2ngTemplate寄宿方式182
5.3在非独立作用域指令中实现scope绑定185
5.4表单验证错误信息显示186
5.5Angular中的AOP机制187
5.5.1拦截器案例188
5.5.2拦截器源码分析192
5.5.3Angular中的装饰器195
5.5.4Angular装饰器源码分析197
5.6Ajax请求和响应数据的转换198
5.6.1兼容老式API198
5.6.2Ajax请求配置的源码分析201
5.7在代码中注入Filter205
5.7.1复用指定Filter205
5.7.2重用多个Filter案例206
5.7.3Filter源码分析207
5.8防止Angular表达式闪烁208
5.8.1表达式闪烁解决方案208
5.8.2ngCloak源码分析208
5.8.3最佳实践209
5.9实现前端权限控制209
5.9.1事件方案210
5.9.2resolve方案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.1module函数的声明和获取重载229
6.2ngModel绑定值不更改232
6.2.1验证引起的model值不显示233
6.2.2原型链继承问题235
6.3指令不生效239
6.4Angular中锚点的使用240
6.5ngRepeat验证失效241
6.5.1简单的验证显示242
6.5.2复杂的验证显示242
6.6有些指令需要唯一的根节点243
6.7指令优先级-Priority243
6.8ngRepeat报重复内容错误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.2Module声明250
7.2.3依赖声明251
7.2.4Module组件声明251
7.3控制器252
7.3.1命名252
7.3.2ControllerAs vm声明252
7.3.3初始化数据253
7.3.4DOM操作253
7.3.5依赖的声明253
7.3.6精简控制器逻辑254
7.3.7禁止用$rootScope传递数据255
7.3.8格式化显示逻辑255
7.3.9Resolve255
7.4服务256
7.4.1命名256
7.4.2代码复用256
7.4.3使用场景256
7.4.4Service返回值257
7.4.5缓存不变数据257
7.4.6RESTful257
7.5过滤器258
7.5.1命名258
7.5.2重用已有Filter258
7.5.3禁止复杂的Filter258
7.6指令259
7.6.1命名259
7.6.2Template声明259
7.6.3link函数的scope参数命名259
7.6.4pre-link和post-link260
7.6.5DOM操作260
7.6.6Directive分类260
7.6.7Directive不是封装jQuery代码“天堂”260
7.6.8自动回收261
7.7模板261
7.7.1表达式绑定261
7.7.2Src、Href问题261
7.7.3Class优于Style262
7.8工具262
7.9其他264
7.9.1内置$服务替代原生服务264
7.9.2Promise解决回调地狱264
7.9.3减少$watch265
7.9.4TDD265
第8章工具267
8.1WebStorm与IntelliJ267
8.2Chrome269
8.3Gulp273
8.4Swagger274
8.4.1前后端分离274
8.4.2Swagger275
8.4.3契约测试277
8.5TSD277
8.6Postman280
8.6.1安装280
8.6.2功能介绍280
第9章杂项知识282
9.1Angular 2.0282
9.2SEO284
9.3IE兼容性287
9.3.1问题概述287
9.3.2问题分类288
9.4访问统计292
9.5响应式布局293
9.6国际化294
9.7动画296
9.7.1CSS动画296
9.7.2JavaScript动画297
9.8手机版开发298
9.8.1Hybrid应用298
9.8.2Ionic300
附录A相关资源301
后记提问的智慧318
前言/序言

新时代
新挑战
时代已经不同了!
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:https://www.scala-sbt.org/0.13/tutorial/zh-cn/index.html的使用文档。如果没有破狼的引荐,我也不会认识前端牛人雪狼和参与本书的编写。
最后,如果没有未婚妻韩盼盼的爱、支持与鼓励,我也难以完成这么多富有挑战性的工作。谢谢,我爱你!

规格参数

品牌 京东图书
品牌属地 中国
ISBN 9787111520962
著者 雪狼,破狼,彭洪伟
出版社 机械工业出版社
印刷时间 2016-01-01
用纸 胶版纸
包装 平装
出版时间 2016-01-01
页数 318
版次 1

免责声明

产品价格、包装、规格等信息如有调整,恕不另行通知。我们尽量做到及时更新产品信息,但请以收到实物为准。使用产品前,请始终阅读产品随附的标签、警告及说明。

查看详情
加入收藏
{{ $isZh ? coupon.coupon_name_sub : coupon.coupon_ename_sub | formatCurrency }}
{{__("Buy Directly")}} {{ itemCurrency }}{{ item.directly_price }}
数量
{{ quantity }}
{{ instockMsg }}
{{ limitText }}
{{buttonTypePin == 3 ? __("Scan to view more PinGo") : __("Scan to start")}}
由 京东图书 销售
送至
{{ __("Ship to United States only") }}
满$69免运费
正品保证

已加入购物车

继续逛逛

为你推荐

{{ item.brand_name }}

{{ item.item_name }}

{{ item.currency }}{{ item.market_price }}

{{ item.currency }}{{ item.unit_price }}

{{ item.currency }}{{ item.unit_price }}

优惠券

{{ coupon.coupon_name_new | formatCurrency }}
领取 已领取 已领完
{{ getCouponDescStr(coupon) }}
{{ coupon.use_time_desc }}
即将过期: {{ formatTime(coupon.use_end_time) }}

分享给好友

取消

亚米礼卡专享价

使用礼卡支付即可获得礼卡专享价

规则说明

礼卡专享价是部分商品拥有的特殊优惠价格;

购买礼卡专享价商品时,若在结算时使用电子礼卡抵扣支付,且礼卡余额足够支付订单中所有礼卡专享价商品的专享价总和,则可以启用礼卡专享价;

不使用礼卡支付,或礼卡余额不满足上一条所述要求时,将无法启用礼卡专享价,按照普通售价计算,但您仍然可以购买这些商品;

在购买礼卡专享价商品时,若余额不足,可以在购物车或结算页中点击“充值”按钮对礼卡进行购买和充值;

商品若拥有礼卡专享价,会显示“专享”的特殊价格标记;

如有疑问,请随时联系客服;

礼卡专享价相关规则最终解释权归亚米所有。

由 亚米 销售

服务保障

Yami 满$49免运费
Yami 无忧退换
Yami 从美国发货

配送信息

  • 美国

    标准配送 $5.99(不包含阿拉斯加,夏威夷),最终价满$49免运费

    本地配送$5.99(加州,纽约州,新泽西,麻省和宾夕法尼亚,以上州部分地区);最终价满$49免运费

    两日达(包含阿拉斯加夏威夷)运费$19.99起

退换政策

亚米网希望为我们的客户提供最优秀的售后服务,让所有人都能放心在亚米购物。亚米自营商品在满足退换货条件的情况下,可在收到包裹的30天之内退换商品(食品因商品质量问题7天内可退换;为了确保每位客户都能获得安全和高质量的商品,对于美妆类产品,一经开封或使用即不提供退款或退货服务,质量问题除外;其他特殊商品需联系客服咨询)。
感谢您的理解和支持。

查看详情

由 亚米 销售

亚米电子礼品卡使用规则

若购买时选择自动充值,订单完成后礼卡将自动充值到您的账户中;

若购买时选择发送邮件,订单完成后系统将自动发送卡号和密码到您填写的邮箱;

发送邮件时,任何用户均可使用邮件中的卡号密码进行礼卡充值,请妥善保管邮件信息。

如接收邮件遇到问题,请联系客服处理;

发送邮件时,若礼卡没有被兑换,可以补发邮件。若已经被其他用户兑换,则无法补偿;

亚米网电子礼卡可用于购买自营或第三方商品;

亚米网电子礼卡没有有效期限制,长期有效;

亚米网电子礼卡的金额,可分多次使用;

亚米网电子礼卡业务规则,最终解释权归亚米网所有。

退换政策

已消费的电子礼卡不支持退款。

京东图书 销售

服务保障

Yami 满$49免运费
Yami 最优售后
Yami 美国本土发货

配送信息

  • 美国

    标准配送 $5.99(不包含阿拉斯加,夏威夷),最终价满$49免运费

    本地配送$5.99(加州,纽约州,新泽西,麻省和宾夕法尼亚,以上州部分地区);最终价满$49免运费

    两日达(包含阿拉斯加夏威夷)运费$19.99起

退换政策

提供30天内退还保障。产品需全新未使用原包装内,并附有购买凭据。产品质量问题、或错发漏发等,由商家造成的失误,将进行补发,或退款处理。其它原因需退货费用由客户自行承担。

由 京东图书 销售

服务保障

Yami 跨店满$69免运费
Yami 30天退换保障

亚米-中国集运仓

由亚米从中国精选并集合各大优秀店铺的商品至亚米中国整合中心,合并包裹后将一次合包跨国邮寄至您的地址。跨店铺包邮门槛低至$69。您将在多商家集合提供的广泛选品中选购商品,轻松享受跨店铺包邮后的低邮费。

退换政策

提供30天内退换保障。产品需在全新未使用的原包装内,并附有购买凭据。产品质量问题、错发、或漏发等由商家造成的失误,将进行退款处理。其它原因造成的退换货邮费客户将需要自行承担。由于所有商品均长途跋涉,偶有简易外包压磨等但不涉及内部质量问题者,不予退换。

配送信息

亚米中国集运 Consolidated Shipping 运费$9.99(订单满$69 包邮)

下单后2个工作日中国商家发货,所有包裹抵达亚米中国整合中心(除特别情况及中国境内个别法定节假日外)会合并包裹后通过UPS发往美国。UPS从中国发货后到美国境内的平均时间为10个工作日左右,根据直发单号可随时跟踪查询。受疫情影响,目前物流可能延迟5天左右。包裹需要客人签收。如未签收,客人须承担包裹丢失风险。

由 京东图书 销售

服务保障

满$69免运费
正品保证

配送信息

Yami Consolidated Shipping 运费$9.99(订单满$69包邮)


下单后1-2个工作日内发货。 物流时效预计7-15个工作日。 如遇清关,交货时间将延长3-7天。 最终收货日期以邮政公司信息为准。

积分规则

不参加任何折扣活动以及亚米会员积分制度。

退换政策

提供30天内退还保障。产品需全新未使用原包装内,并附有购买凭据。产品质量问题、或错发漏发等,由商家造成的失误,将进行补发,或退款处理。其它原因需退货费用由客户自行承担。

Yami

下载亚米应用

返回顶部

为你推荐

品牌故事

京东图书

为您推荐

Yami
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yami
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yami
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yami
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yami
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折
Yami
欣葉
2种选择
欣叶 御大福 芋头麻薯 180g

周销量 600+

$1.66 $1.99 83折

评论{{'('+ commentList.posts_count + ')'}}

分享你的感受,帮助更多用户做出选择。

写评论
{{ totalRating }} 写评论
  • {{i}}星

    {{i}}星

    {{ parseInt(commentRatingList[i]) }}%

Yami Yami
{{ comment.user_name }}

{{ showTranslate(comment) }}收起

{{ strLimit(comment,800) }}查看全部

Show Original

{{ comment.content }}

Yami
查看更多

{{ formatTime(comment.in_dtm) }} 已购买 {{groupData}}

{{ comment.likes_count }} {{ comment.likes_count }} {{ comment.reply_count }} {{comment.in_user==uid ? __('Delete') : __('Report')}}
Yami Yami
{{ comment.user_name }}

{{ showTranslate(comment) }}收起

{{ strLimit(comment,800) }}查看全部

Show Original

{{ comment.content }}

Yami
查看更多

{{ formatTime(comment.in_dtm) }} 已购买 {{groupData}}

{{ comment.likes_count }} {{ comment.likes_count }} {{ comment.reply_count }} {{comment.in_user==uid ? __('Delete') : __('Report')}}

暂无符合条件的评论

评论详情

Yami Yami

{{ showTranslate(commentDetails) }}收起

{{ strLimit(commentDetails,800) }}查看全部

Show Original

{{ commentDetails.content }}

Yami
查看更多

{{ formatTime(commentDetails.in_dtm) }} 已购买 {{groupData}}

{{ commentDetails.likes_count }} {{ commentDetails.likes_count }} {{ commentDetails.reply_count }} {{commentDetails.in_user==uid ? __('Delete') : __('Report')}}

请输入内容

回复{{'(' + replyList.length + ')'}}

Yami Yami

{{ showTranslate(reply) }}收起

{{ strLimit(reply,800) }}查看全部

Show Original

{{ reply.reply_content }}

{{ formatTime(reply.reply_in_dtm) }}

{{ reply.reply_likes_count }} {{ reply.reply_likes_count }} {{ reply.reply_reply_count }} {{reply.reply_in_user==uid ? __('Delete') : __('Report')}}

请输入内容

取消

End

发表评论
商品评分

请输入评论

  • 一个好的昵称,会让你的评论更受欢迎!
  • 修改了这里的昵称,个人资料中的昵称也将被修改。
感谢你的评论
你的好评可以帮助我们的社区发现更好的亚洲商品。

举报

取消

确认删除该评论吗?

取消

历史浏览

品牌故事

京东图书