图书目录

第Ⅰ部分  Angular基础知识

第1章  准备工作   3

1.1  需要了解什么   3

1.2  本书结构   3

1.2.1  第Ⅰ部分:Angular基础知识   3

1.2.2  第Ⅱ部分:Angular详解   4

1.2.3  第Ⅲ部分:Angular高级功能   4

1.3  本书不介绍什么   4

1.4  Angular开发需要什么软件   4

1.5  如何设置开发环境   4

1.6  学习示例时遇到问题怎么办   4

1.7  如果在书中发现错误怎么办   5

1.8  大量示例   5

1.9  获取示例代码   6

1.10  联系作者   6

1.11  如果你真的很喜欢这本书   7

1.12  如果你不喜欢这本书   7

1.13  本章小结   7

第2章  第一个Angular应用程序   9

2.1  准备开发环境   9

2.1.1  安装Node.js   9

2.1.2  安装angular-cli包   10

2.1.3  安装编辑器   11

2.1.4  安装浏览器   11

2.2  创建并准备项目   11

2.2.1  创建项目   11

2.2.2  启动开发工具   12

2.3  向项目中添加Angular功能   13

2.3.1  创建数据模型   14

2.3.2  向用户显示数据   16

2.3.3  更新组件   17

2.3.4  设置HTML元素的样式   20

2.3.5  显示待办事项列表   21

2.3.6  创建双向数据绑定   24

2.3.7  添加待办事项   26

2.3.8  显示完成的待办事项   29

2.4  本章小结   31

第3章  将Angular放在上下文中   33

3.1  理解Angular的强项   33

3.2  比较Angular、React和Vue.js   34

3.3  理解MVC模式   35

3.3.1  理解模型   36

3.3.2  理解控制器/组件   37

3.3.3  理解视图/模板   38

3.4  理解RESTful服务   38

3.5  常见的设计缺陷   39

3.5.1  将逻辑放错地方   40

3.5.2  数据存储采用的数据格式   40

3.5.3  足够的知识足以制造麻烦   40

3.6  本章小结   40

第4章  HTML和CSS入门   43

4.1  准备示例项目   43

4.2  理解HTML   45

4.2.1  理解空元素   45

4.2.2  理解属性   45

4.2.3  应用无值属性   46

4.2.4  在属性中引用字面量   46

4.2.5  理解元素内容   46

4.2.6  理解文档结构   47

4.3  理解Bootstrap   48

4.3.1  应用基本的Bootstrap类   48

4.3.2  使用Bootstrap样式化表格   51

4.3.3  使用Bootstrap创建表单   52

4.3.4  使用Bootstrap创建网格   53

4.4  本章小结   58

第5章  JavaScript与TypeScript:第1部分   59

5.1  准备示例项目   60

5.2  使用语句   61

5.3  定义和使用函数   62

5.3.1  定义带形参的函数   63

5.3.2  定义返回结果的函数   64

5.3.3  将函数用作其他函数的实参   64

5.4  使用变量和类型   65

5.4.1  使用变量闭包   67

5.4.2  使用基本数据类型   67

5.5  使用JavaScript操作符   69

5.5.1  使用条件语句   69

5.5.2  相等操作符和恒等操作符   70

5.5.3  显式类型转换   71

5.6  处理数组   72

5.6.1  使用数组字面量   73

5.6.2  数组内容的读取和修改   73

5.6.3  遍历数组内容   73

5.6.4  spread操作符   74

5.6.5  使用内置数组方法   75

5.7  本章小结   76

第6章  JavaScript与TypeScript:第2部分   77

6.1  准备示例项目   77

6.2  使用对象   78

6.2.1  使用对象字面量   78

6.2.2  将函数用作方法   79

6.2.3  定义类   79

6.3  处理JavaScript模块   82

6.4  有用的TypeScript特性   86

6.4.1  使用类型注解   86

6.4.2  使用元组   90

6.4.3  使用可索引类型   91

6.4.4  使用访问修饰符   91

6.5  本章小结   92

第7章  SportsStore:一个真实的应用程序   93

7.1  准备项目   93

7.1.1  安装额外的NPM软件包   94

7.1.2  准备RESTful Web服务   95

7.1.3  准备HTML文件   97

7.1.4  创建文件夹结构   97

7.1.5  运行示例应用程序   98

7.1.6  启动RESTful Web服务   98

7.2  准备Angular项目功能   98

7.2.1  更新根组件   98

7.2.2  更新根模块   99

7.2.3  检查引导文件   100

7.3  启动数据模型   100

7.3.1  创建模型类   100

7.3.2  创建虚拟数据源   101

7.3.3  创建模型存储库   102

7.3.4  创建功能模块   103

7.4  启动商店   103

7.4.1  创建Store组件和模板   104

7.4.2  创建商店功能模块   105

7.4.3  更新根组件和根模块   106

7.5  添加商店功能:产品详情   107

7.5.1  显示产品详情   107

7.5.2  添加类别选择   108

7.5.3  添加产品分页功能   110

7.5.4  创建自定义指令   112

7.6  本章小结   116

第8章  SportsStore:订单和结账   117

8.1  准备示例应用程序   117

8.2  创建购物车   117

8.2.1  创建购物车模型   117

8.2.2  创建购物车概览组件   119

8.2.3  将购物车集成到商店中   120

8.3  添加URL路由   123

8.3.1  创建购物车详情和结账组件   124

8.3.2  创建和应用路由配置   124

8.3.3  应用程序导航   126

8.3.4  路由守卫   128

8.4  完成购物车详情功能   130

8.5  处理订单   133

8.5.1  扩展模型   133

8.5.2  收集订单详情   135

8.6  使用RESTful Web服务   138

8.7  本章小结   140

第9章  SportsStore:管理   141

9.1  准备示例应用程序   141

9.1.1  创建模块   141

9.1.2  配置URL路由系统   144

9.1.3  导航到管理URL   145

9.2  实现身份验证   146

9.2.1  理解身份验证系统   146

9.2.2  扩展数据源   147

9.2.3  创建身份验证服务   148

9.2.4  启用身份验证   149

9.3  扩展数据源和存储库   151

9.4  创建管理功能结构   155

9.4.1  创建占位符组件   155

9.4.2  准备常用内容和功能模块   156

9.4.3  实现产品功能   158

9.4.4  实现订单功能   162

9.5  本章小结   164

第10章  SportsStore:渐进式特性和部署   165

10.1  准备示例应用程序   165

10.2  添加渐进式特性   165

10.2.1  安装PWA包   165

10.2.2  缓存数据URL   166

10.2.3  响应对连接的更改   167

10.3  为部署准备应用程序   169

10.3.1  创建数据文件   169

10.3.2  创建服务器   169

10.3.3  更改存储库类中的Web服务URL   171

10.4  构建和测试应用程序   172

10.5  将SportsStore应用程序容器化   174

10.5.1  安装Docker   174

10.5.2  准备应用程序   174

10.5.3  创建Docker容器   174

10.5.4  运行应用程序   175

10.6  本章小结   177

第Ⅱ部分  Angular详解

第11章  理解Angular项目和工具   181

11.1  创建新的Angular项目   181

11.2  了解项目结构   182

11.2.1  了解src文件夹   183

11.2.2  了解包文件夹   184

11.3  使用开发工具   187

11.3.1  了解开发HTTP服务器   187

11.3.2  了解构建过程   188

11.3.3  使用linter   192

11.4  理解Angular应用程序是如何工作的   194

11.4.1  理解HTML文档   194

11.4.2  理解应用程序引导   195

11.4.3  理解Angular根模块   196

11.4.4  理解Angular组件   197

11.4.5  理解内容显示   197

11.5  了解生产构建过程   199

11.5.1  了解预编译   199

11.5.2  了解差异加载   199

11.5.3  运行生产构建   201

11.6  在Angular项目中开始开发   201

11.6.1  创建数据模型   201

11.6.2  创建组件和模板   205

11.6.3  配置根Angular模块   206

11.7  本章小结   207

第12章  使用数据绑定   209

12.1  准备示例项目   210

12.2  理解单向数据绑定   210

12.2.1  理解绑定目标   212

12.2.2  理解表达式   213

12.2.3  理解括号   214

12.2.4  理解宿主元素   214

12.3  使用标准属性和属性绑定   215

12.3.1  使用标准属性绑定   215

12.3.2  使用字符串插入绑定   216

12.3.3  使用元素属性绑定   217

12.4  设置CSS类和样式   218

12.4.1  使用类绑定   218

12.4.2  使用样式绑定   223

12.5  更新应用程序的数据   226

12.6  本章小结   228

第13章  使用内置指令   229

13.1  准备示例项目   230

13.2  使用内置指令   231

13.2.1  使用ngIf指令   232

13.2.2  使用ngSwitch指令   234

13.2.3  使用ngFor指令   236

13.2.4  使用ngTemplateOutlet指令   244

13.3  理解单向数据绑定的限制   246

13.3.1  使用幂等表达式   246

13.3.2  理解表达式上下文   249

13.4  本章小结   251

第14章  使用事件和表单   253

14.1  准备示例项目   254

14.1.1  导入表单模块   254

14.1.2  准备组件和模板   254

14.2  使用事件绑定   255

14.2.1  使用事件数据   259

14.2.2  使用模板引用变量   260

14.3  使用双向数据绑定   262

14.4  处理表单   265

14.4.1  向示例应用程序添加表单   265

14.4.2  添加表单数据验证   267

14.4.3  验证整个表单   275

14.5  使用基于模型的表单   281

14.5.1  启用基于模型的表单功能   282

14.5.2  定义表单模型类   282

14.5.3  使用模型进行验证   285

14.5.4  根据模型生成元素   288

14.6  创建自定义表单验证器   289

14.7  本章小结   292

第15章  创建属性指令   293

15.1  准备示例项目   294

15.2  创建简单的属性指令   296

15.3  在指令中访问应用程序数据   298

15.3.1  读取宿主元素属性   298

15.3.2  创建数据绑定输入

属性   300

15.3.3  响应输入属性的变化   303

15.4  创建自定义事件   305

15.5  创建宿主元素绑定   308

15.6  在宿主元素上创建双向绑定   309

15.7  导出指令用于模板变量   312

15.8  本章小结   315

第16章  创建结构型指令   317

16.1  准备示例项目   318

16.2  创建简单的结构型指令   319

16.2.1  实现结构型指令类   320

16.2.2  启用结构型指令   322

16.2.3  使用结构型指令的简洁语法   323

16.3  创建迭代结构型指令   324

16.3.1  提供额外的上下文数据   327

16.3.2  使用简洁的结构语法   329

16.3.3  处理属性级数据变更   330

16.3.4  处理集合级数据变更   331

16.4  查询宿主元素内容   340

16.4.1  查询多个子内容   344

16.4.2  接收查询变更通知   346

16.5  本章小结   347

第17章  理解组件   349

17.1  准备示例项目   350

17.2  使用组件组织应用程序   350

17.2.1  创建新组件   351

17.2.2  定义模板   354

17.2.3  完成组件的重组   363

17.3  使用组件样式   364

17.3.1  定义外部组件样式   365

17.3.2  使用高级样式特性   366

17.4  查询模板内容   372

17.5  本章小结   374

第18章  使用和创建管道   375

18.1  准备示例项目   376

18.2  理解管道   378

18.3  创建一个自定义管道   380

18.3.1  注册自定义管道   381

18.3.2  应用自定义管道   382

18.3.3  组合管道   383

18.3.4  创建非纯管道   384

18.4  使用内置管道   387

18.4.1  格式化数值   388

18.4.2  格式化货币值   390

18.4.3  格式化百分比   393

18.4.4  格式化日期   394

18.4.5  改变字符串大小写   397

18.4.6  将数据序列化为JSON数据   399

18.4.7  将数据数组切片   400

18.4.8  格式化键/值对   401

18.4.9  选择值   402

18.4.10  复数化值   404

18.5  本章小结   405

第19章  使用服务   407

19.1  准备示例项目   408

19.2  理解对象分发问题   409

19.2.1  问题的提出   409

19.2.2  利用依赖注入将对象作为服务分发   414

19.2.3  在其他构造块中声明依赖   419

19.3  理解测试隔离问题   425

19.4  完成服务的融入   428

19.4.1  更新根组件和模板   429

19.4.2  更新子组件   430

19.5  本章小结   431

第20章  使用服务提供程序   433

20.1  准备示例项目   434

20.2  使用服务提供程序   435

20.2.1  使用类提供程序   438

20.2.2  使用值提供程序   445

20.2.3  使用工厂提供程序   447

20.2.4  使用已有的服务提供程序   449

20.3  使用本地提供程序   450

20.3.1  理解单个服务对象的局限性   450

20.3.2  在组件中创建本地提供程序   452

20.3.3  理解服务提供程序的替代方案   453

20.3.4  控制依赖解析   458

20.4  本章小结   459

第21章  使用和创建模块   461

21.1  准备示例项目   461

21.2  理解根模块   463

21.2.1  理解imports属性   465

21.2.2  理解declarations属性   465

21.2.3  理解providers属性   466

21.2.4  理解bootstrap属性   466

21.3  创建功能模块   468

21.3.1  创建模型模块   469

21.3.2  创建实用工具功能模块   473

21.3.3  使用组件创建一个功能模块   478

21.4  本章小结   482

第Ⅲ部分  Angular高级功能

第22章  创建示例项目   485

22.1  启动示例项目   485

22.1.1  添加和配置Bootstrap 

CSS包   485

22.1.2  创建项目结构   486

22.2  创建模型模块   486

22.2.1  创建产品数据类型   486

22.2.2  创建数据源和存储库   486

22.2.3  完成模型模块   488

22.3  创建核心模块   488

22.3.1  创建共享状态服务   488

22.3.2  创建表格组件   489

22.3.3  创建表单组件   490

22.3.4  完成核心模块   492

22.4  创建消息模块   493

22.4.1  创建消息模型和服务   493

22.4.2  创建组件和模板   493

22.4.3  完成消息模块   494

22.5  完成项目   495

22.6  本章小结   496

第23章  使用Reactive Extensions   497

23.1  准备示例项目   498

23.2  理解问题   498

23.3  使用Reactive Extensions解决

问题   501

23.3.1  理解Observable   502

23.3.2  理解Observer   503

23.3.3  理解Subject   505

23.4  使用async管道   506

23.5  扩展应用程序功能模块   509

23.6  更进一步   511

23.6.1  过滤事件   511

23.6.2  转换事件   513

23.6.3  只接收不同的事件   515

23.6.4  获取和忽略事件   517

23.7  本章小结   519

第24章  生成HTTP请求   521

24.1  准备示例项目   522

24.1.1  配置模型功能模块   522

24.1.2  创建数据文件   523

24.1.3  更新表单组件   523

24.1.4  运行示例项目   524

24.2  理解RESTful Web服务   524

24.3  替换静态数据源   525

24.3.1  创建新的数据源服务   525

24.3.2  配置数据源   527

24.3.3  使用REST数据源   527

24.3.4  保存和删除数据   529

24.4  加强HTTP请求   531

24.5  生成跨域请求   533

24.6  配置请求头   535

24.7  处理错误   537

24.7.1  生成用户可使用的消息   538

24.7.2  处理错误   540

24.8  本章小结   541

第25章  路由与导航:第1部分   543

25.1  准备示例项目   544

25.2  开始学习路由   546

25.2.1  创建路由配置   546

25.2.2  创建路由组件   548

25.2.3  更新根模块   548

25.2.4  完成配置   549

25.2.5  添加导航链接   550

25.2.6  理解路由的效果   552

25.3  完成路由实现   554

25.3.1  在组件中处理路由变化   554

25.3.2  使用路由参数   556

25.3.3  在代码中导航   562

25.3.4  接收导航事件   564

25.3.5  删除事件绑定和支持代码   566

25.4  本章小结   568

第26章  路由与导航:第2部分   569

26.1  准备示例项目   569

26.2  使用通配符和重定向   575

26.2.1  在路由中使用通配符   575

26.2.2  在路由中使用重定向   577

26.3  在组件内部导航   578

26.3.1  响应正在发生的路由变化   579

26.3.2  为活动路由设置不同样式的链接   581

26.3.3  修复All按钮   584

26.4  创建子路由   585

26.4.1  创建子路由出口   586

26.4.2  从子路由访问参数   588

26.5  本章小结   592

第27章  路由与导航:第3部分   593

27.1  准备示例项目   593

27.2  守卫路由   595

27.2.1  使用解析器推迟导航   595

27.2.2  避免带有守卫的导航   601

27.3  动态加载功能模块   613

27.3.1  创建一个简单的功能模块   613

27.3.2  动态加载模块   614

27.3.3  守卫动态模块   618

27.4  指定命名出口   620

27.4.1  创建附加的出口元素   621

27.4.2  在使用多个出口的情况下导航   623

27.5  本章小结   624

第28章  使用动画   625

28.1  准备示例项目   626

28.1.1  禁用HTTP延迟   626

28.1.2  简化表格模板和路由配置   627

28.2  开始学习Angular动画   629

28.2.1  启用动画模块   629

28.2.2  创建动画   630

28.2.3  应用动画   633

28.2.4  测试动画效果   635

28.3  理解内置的动画状态   637

28.4  理解元素过渡   638

28.4.1  为内置状态创建过渡   638

28.4.2  控制动画的过渡   639

28.5  理解动画样式组   644

28.5.1  在可重用的分组中定义公共样式   644

28.5.2  使用元素变形   646

28.5.3  应用CSS框架样式   647

28.6  本章小结   649

第29章  Angular单元测试   651

29.1  准备示例项目   652

29.2  创建一个简单的单元测试   654

29.3  使用Jasmine完成单元测试   655

29.4  测试Angular组件   656

29.4.1  使用TestBed类完成工作   656

29.4.2  测试数据绑定   660

29.4.3  测试带有外部模板的组件   662

29.4.4  测试组件事件   663

29.4.5  测试输出属性   665

29.4.6  测试输入属性   667

29.4.7  测试异步操作   669

29.5  测试Angular指令   671

29.6  本章小结   673