第1章 Angular 2介绍 1
1.1 JavaScript框架和库的示例 1
1.1.1重量级框架 2
1.1.2轻量级框架 2
1.1.3库 2
1.1.4什么是Node.js 4
1.2 AngularJS高级概述 4
1.3 Angular高级概述 7
1.3.1简化代码 7
1.3.2性能提升 12
1.4 Angular开发者工具 13
1.5如何使用Angular 16
1.6在线拍卖示例介绍 17
1.7本章 小结 19
第2章 Angular入门 20
2.1第一个Angular应用程序 20
2.1.1 TypeScript版本的Hello World 21
2.1.2 ES5版本的Hello World 24
2.1.3 ES6版本的Hello World 26
2.1.4启动应用程序 27
2.2 Angular应用程序的构建块 28
2.2.1模块 28
2.2.2组件 29
2.2.3指令 31
2.2.4数据绑定简介 32
2.3通用模块加载器SystemJS 32
2.3.1模块加载器概览 33
2.3.2模块加载器与〈script〉标签 33
2.3.3 SystemJS入门 34
2.4选择包管理器 39
2.4.1对比npm和jspm 40
2.4.2使用npm开始一个Angular项目 41
2.5动手实践:开始在线拍卖应用程序 47
2.5.1初始化项目设置 48
2.5.2开发首页 49
2.5.3启动在线拍卖应用程序 56
2.6本章 小结 57
第3章 使用Angular路由导航 58
3.1路由基础 58
3.1.1定位策略 60
3.1.2客户端导航的构建块 61
3.1.3使用navigate()导航到路由 67
3.2向路由传递数据 69
3.2.1从ActivatedRoute对象中提取参数 69
3.2.2传递静态数据给路由 72
3.3子路由 73
3.4守护路由 79
3.5开发一个具有多个路由插座的单页面应用 84
3.6将应用程序分解到模块中 87
3.7延迟加载模块 89
3.8实践:为在线拍卖应用程序添加导航 91
3.8.1创建ProductDetailComponent 92
3.8.2创建HomeComponent和代码重构 93
3.8.3简化ApplicationComponent 94
3.8.4将RouterLink添加到ProductItemComponent 95
3.8.5修改根模块,添加路由 97
3.8.6运行在线拍卖应用程序 97
3.9本章小结 98
第4章 依赖注入 99
4.1依赖注入模式和控制反转模式 99
4.1.1依赖注入模式 100
4.1.2控制反转模式 100
4.1.3依赖注入的好处 100
4.2注入器和provider 103
4.3使用Angular DI的示例应用程序 106
4.3.1注入产品服务 106
4.3.2注入Http服务 109
4.4轻松切换可注入(组件/对象) 110
4.4.1使用useFactory和useValue属性声明providers 113
4.4.2使用OpaqueToken 116
4.5注入器的层级结构 117
4.6实践:在在线拍卖应用程序中使用DI 119
4.6.1更改代码,将产品ID作为参数传递 122
4.6.2修改ProductDetailComponent 122
4.7本章小结 126
第5章 绑定、observable和管道 127
5.1数据绑定 127
5.1.1事件绑定 128
5.1.2属性绑定和特性绑定 129
5.1.3模板中的绑定 133
5.1.4双向数据绑定 136
5.2响应式编程和observable 138
5.2.1什么是observable和观察者 139
5.2.2 observable事件流 141
5.2.3取消observables 145
5.3管道 148
5.4实践:在线拍卖应用程序中产品的过滤功能 151
5.5本章小结 154
第6章 实现组件通信 156
6.1组件间通信 156
6.1.1输入和输出属性 157
6.1.2 Mediator模式 163
6.1.3使用ngContent在运行时修改模板 167
6.2组件生命周期 172
6.3变更检测高级概述 178
6.4如何暴露子组件中的API 180
6.5实践:为在线拍卖应用程序添加评分功能 182
6.6本章小结 189
第7章 使用表单 190
7.1 HTML表单概述 191
7.1.1标准浏览器功能 191
7.1.2 Angular Forms API 193
7.2模板驱动表单 194
7.2.1指令概述 194
7.2.2丰富HTML表单 196
7.3响应式表单 198
7.3.1表单模型 198
7.3.2表单指令 199
7.3.3重构示例表单 203
7.3.4使用FormBuilder 204
7.4表单验证 205
7.5动手实践:给搜索表单添加验证 214
7.5.1修改根模块以添加Forms API支持 214
7.5.2将一个类别列表添加到SearchComponent 215
7.5.3创建表单模型 216
7.5.4重构模板 216
7.5.5实现onSearch()方法 218
7.5.6启动在线拍卖应用程序 218
7.6本章小结 218
第8章 使用HTTP和WebSocket与服务器交互 219
8.1简述Http对象的API 219
8.2使用Node和TypeScript创建Web服务器 222
8.2.1创建一台简单的Web服务器 222
8.2.2提供JSON 225
8.2.3 TypeScript实时重新编译与代码重新加载 226
8.2.4添加提供产品的RESTful API 227
8.3将Angular与Node结合在一起 229
8.3.1服务器上的静态资源 229
8.3.2使用Http对象进行GET请求 232
8.3.3在模板中使用AsyncPipe展开observables 234
8.3.4将HTTP注入到服务中 235
8.4通过WebSocket进行客户端-服务器通信 239
8.4.1从Node服务器推送数据 239
8.4.2将WebSocket转换成observable 243
8.5动手实践:实现产品搜索和出价通知 249
8.5.1使用HTTP实现产品搜索 250
8.5.2使用WebSocket广播拍卖出价 254
8.6本章小结 258
第9章 Angular应用程序单元测试 259
9.1了解Jasmine 260
9.1.1测试什么 262
9.1.2如何安装Jasmine 262
9.2 Angular测试库都包括了什么 264
9.2.1测试服务 265
9.2.2使用路由测试导航 266
9.2.3测试组件 267
9.3测试天气示例应用程序 267
9.3.1配置SystemJS 269
9.3.2测试天气路由 270
9.3.3测试天气服务 272
9.3.4天气测试组件 275
9.4使用Karma运行测试 278
9.5实践:在线拍卖应用程序单元测试 281
9.5.1测试ApplicationComponent 283
9.5.2测试ProductService 283
9.5.3测试StarsComponent 284
9.5.4运行测试 287
9.6本章小结 288
第10章 使用Webpack打包并部署应用程序 289
10.1了解Webpack 291
10.1.1使用Webpack的Hello World 292
10.1.2如何使用加载器 296
10.1.3如何使用插件 300
10.2为Angular创建基本的Webpack配置 300
10.2.1 npm run build 303
10.2.2 npm start 305
10.3创建开发和生产配置 305
10.3.1开发(环境)配置 306
10.3.2生产(环境)配置 307
10.3.3自定义的类型定义文件 309
10.4 Angular CLI概述 312
10.4.1用Angular CLI启动新项目 312
10.4.2 CLI命令 313
10.5动手实践:使用Webpack部署在线拍卖应用程序 314
10.5.1启动Node服务器 315
10.5.2启动在线拍卖应用程序的客户端 316
10.5.3使用Karma运行测试 319
10.6本章 小结 322
附录A ECMAScript 6概述 323
附录B 作为Angular应用程序语言的TypeScript 362