内容简介
第一部分 入门篇
1 前端风云
1.1 故事的起点
1.2 AJAX王者归来
1.3 工具库的流行
1.4 百家争鸣
1.5 走进前端新时代
1.6 小结
2 Angular简介
2.1 历史回顾
2.1.1 AngularJS 1.x起源
2.1.2 AngularJS 1.x迭代之路
2.1.3 初生的Angular2
2.1.4 快速发展的Angular 2
2.1.5 开发语言之选
2.2 Angular 2简述
2.2.1 核心概念
2.2.2 平台简介
2.2.3 平台亮点
2.3 小结
3 TypeScript入门
3.1 TypeScript概述
3.1.1 概述
3.1.2 安装
3.2 基本类型
3.2.1 布尔类型
3.2.2 数字类型
3.2.3 字符串类型
3.2.4 数组类型
3.2.5 元组类型
3.2.6 枚举类型
3.2.7 任意值类型
3.2.8 null和undefined
3.2.9 void类型
3.2.10 never类型
3.3 声明和解构
3.3.1 let声明
3.3.2 const声明
3.3.3 解构
3.4 函数
3.4.1 函数定义
3.4.2 可选参数
3.4.3 默认参数
3.4.4 剩余参数
3.4.5 函数重载
3.4.6 箭头函数
3.5 类
3.5.1 类的例子
3.5.2 继承与多态
3.5.3 修饰符
3.5.4 参数属性
3.5.5 静态属性
3.5.6 抽象类
3.6 模块
3.6.1 概述
3.6.2 模块导出方式
3.6.3 模块导入方式
3.6.4 模块的默认导出
3.6.5 模块设计原则
3.7 接口
3.7.1 概述
3.7.2 属性类型接口
3.7.3 函数类型接口
3.7.4 可索引类型接口
3.7.5 类类型接口
3.7.6 接口扩展
3.8 装饰器
3.8.1 概述
3.8.2 方法装饰器
3.8.3 类装饰器
3.8.4 参数装饰器
3.8.5 属性装饰器
3.8.6 装饰器组合
3.9 泛型
3.10 TypeScript周边
3.10.1 编译配置文件
3.10.2 声明文件
3.10.3 编码工具
3.10.4 展望未来
3.11 小结
4 快速入门
4.1 Hello World例子
4.1.1 准备工作
4.1.2 搭建步骤
4.2 通讯录例子
4.2.1 背景介绍
4.2.2 架构设计
4.3 小结
第二部分 深入篇
5 Angular架构总览
5.1 核心模块介绍
5.1.1 组件
5.1.2 模板
5.1.3 指令
5.1.4 服务
5.1.5 依赖注入
5.1.6 路由
5.2 应用模块
5.3 源码结构介绍
5.4 小结
6 组件
6.1 概述
6.1.1 模块化介绍
6.1.2 组件化标准
6.1.3 Angular的组件
6.2 组件基础
6.2.1 创建组件的步骤
6.2.2 组件基础构成
6.2.3 组件与模块
6.3 组件交互
6.3.1 组件的输入输出属性
6.3.2 父组件向子组件传递数据
6.3.3 子组件向父组件传递数据
6.3.4 其他组件交互方式
6.4 组件内容嵌入
6.5 组件生命周期
6.5.1 概述
6.5.2 生命周期钩子
6.6 变化监测
6.6.1 数据变化的源头
6.6.2 变动通知机制
6.6.3 变化监测的响应处理
6.7 扩展阅读
6.7.1 元数据一览表
6.7.2 元数据说明
6.7.3 深入理解Zones
6.8 小结
7 模板
7.1 模板语法概览
7.2 数据绑定
7.2.1 概述
7.2.2 插值
7.2.3 模板表达式
7.2.4 属性绑定
7.2.5 事件绑定
7.2.6 双向数据绑定
7.2.7 输入和输出属性
7.3 内置指令
7.3.1 NgClass
7.3.2 NgStyle
7.3.3 NgIf
7.3.4 NgSwitch
7.3.5 NgFor
7.4 表单
7.4.1 模板表单例子
7.4.2 表单指令
7.4.3 自定义表单样式
7.4.4 表单校验
7.5 管道
7.5.1 管道介绍
7.5.2 内置管道
7.5.3 自定义管道
7.5.4 管道的变化监测
7.6 扩展阅读
7.6.1 安全导航操作符
7.6.2 双向绑定的原理
7.7 小结
8 指令
8.1 概述
8.1.1 指令分类
8.1.2 内置指令
8.2 自定义属性指令
8.2.1 实现属性指令
8.2.2 为指令绑定输入
8.2.3 响应用户操作
8.3 自定义结构指令
8.3.1 实现结构指令
8.3.2 模板标签与星号前缀
8.3.3 NgIf指令原理
8.4 扩展阅读
8.5 小结
9 服务与RxJS
9.1 Angular服务
9.1.1 概述
9.1.2 使用场景
9.2 HTTP服务
9.2.1 AJAX介绍
9.2.2 JSONP介绍
9.2.3 HttpModule
9.3 响应式编程
9.3.1 概述
9.3.2 ReactiveX
9.4 RxJS
9.4.1 创建Observable对象
9.4.2 使用RxJS处理复杂场景
9.4.3 RxJS和Promise的对比
9.4.4 “冷”模式下的Observable
9.4.5 RxJS中的Operator
9.4.6 Angular中的RxJS
9.5 小结
10 依赖注入
10.1 依赖注入介绍
10.2 Angular依赖注入
10.2.1 概述
10.2.2 在组件中注入服务
10.2.3 在服务中注入服务
10.2.4 在模块中注入服务
10.2.5 层级注入
10.2.6 注入到派生组件
10.2.7 限定方式的依赖注入
10.3 Provider
10.3.1 概述
10.3.2 Provider注册方式
10.4 扩展阅读
10.5 小结
11 路由
11.1 概述
11.2 基本用法
11.2.1 路由配置
11.2.2 创建根路由模块
11.2.3 添加RouterOutlet指令
11.3 路由策略
11.3.1 HashLocationStrategy介绍
11.3.2 PathLocationStrategy介绍
11.4 路由跳转
11.4.1 使用指令跳转
11.4.2 使用代码跳转
11.5 路由参数
11.5.1 Path参数
11.5.2 Query参数
11.5.3 Matrix参数
11.6 子路由和附属Outlet
11.6.1 子路由
11.6.2 附属Outlet
11.7 路由拦截
11.7.1 激活拦截与反激活拦截
11.7.2 数据预加载拦截
11.8 模块的延迟加载
11.8.1 延迟加载实现
11.8.2 模块加载拦截
11.9 小结
12 测试
12.1 概述
12.2 单元测试
12.2.1 概述
12.2.2 常用测试框架
12.2.3 Jasmine介绍
12.2.4 Karma介绍
12.2.5 Karma结合Jasmine测试
12.3 Angular单元测试
12.3.1 概述
12.3.2 独立单元测试
12.3.3 测试工具集
12.4 端到端测试
12.4.1 概述
12.4.2 Protractor介绍
12.5 小结
第三部分 实战篇
13 问卷调查系统简介
13.1 项目背景
13.2 主要特性
13.2.1 首页和帮助页
13.2.2 问卷编辑页
13.2.3 我的问卷页
13.2.4 用户管理页
13.3 产品设计
13.4 小结
14 项目起步
14.1 技术选型
14.1.1 前端脚手架
14.1.2 UI样式库
14.1.3 后端服务器
14.2 环境搭建
14.2.1 搭建脚手架
14.2.2 引入样式库
14.2.3 搭建后台环境
14.3 目录结构介绍
14.4 首页开发
14.5 小结
15 问卷编辑模块
15.1 概述
15.1.1 功能设计
15.1.2 数据模型
15.2 问卷编辑模块开发
15.2.1 问题选择组件
15.2.2 问题组件
15.2.3 问卷组件
15.2.4 问卷服务
15.2.5 问卷大纲
15.3 小结
16 我的问卷模块
16.1 问卷列表
16.1.1 问卷列表项
16.1.2 显示问卷列表
16.1.3 显示问卷详情
16.2 问卷操作
16.2.1 修改路由配置
16.2.2 发布后的问卷页面
16.2.3 问卷操作组件
16.3 小结
17 用户管理模块
17.1 开发简单注册页
17.2 表单控件组件
17.2.1 定义表单控件
17.2.2 校验表单控件
17.2.3 表单安全
17.3 用户注册功能开发
17.3.1 用户注册服务
17.3.2 组件的逻辑
17.3.3 注册接口开发
17.4 权限管理
17.5 小结
18 项目构建和最佳实践
18.1 项目构建
18.1.1 代码质量检查
18.1.2 测试
18.1.3 打包
18.1.4 容器化
18.2 最佳实践
18.2.1 单一职责
18.2.2 命名约定
18.2.3 编码约定
18.2.4 应用结构约定
18.2.5 组件相关约定
18.2.6 指令相关约定
18.2.7 服务相关约定
18.2.8 其他
18.3 小结