W?章 Vue.js?1
1.1 什么是Vue.js 1
1.2 Vue.js?2
W一 变化侦测
W?章 Object的变化侦?6
2.1 什么是变化侦测 6
2.2 如何q踪变化 7
2.3 如何攉依赖 7
2.4 依赖攉在哪?8
2.5 依赖是谁 10
2.6 什么是Watcher 10
2.7 递归侦测所有key 12
2.8 关于Object的问?13
2.9 ȝ 14
W?章 Array的变化侦?16
3.1 如何q踪变化 16
3.2 拦截?17
3.3 使用拦截器覆盖Array原型 18
3.4 拦截器Ҏ(gu)挂蝲到数l的属性上 19
3.5 如何攉依赖 21
3.6 依赖列表存在哪儿 22
3.7 攉依赖 23
3.8 在拦截器中获取Observer实例 24
3.9 向数l的依赖发送通知 25
3.10 侦测数组中元素的变化 26
3.11 侦测新增元素的变?27
3.11.1 获取新增元素 27
3.11.2 使用Observer侦测新增元素 28
3.12 关于Array的问?29
3.13 ȝ 29
W?章 变化侦测相关的API实现原理 31
4.1 vm.$watch 31
4.1.1 用法 31
4.1.2 watch的内部原?32
4.1.3 deep参数的实现原?36
4.2 vm.$set 38
4.2.1 用法 38
4.2.2 Array的处?39
4.2.3 key已经存在于target?40
4.2.4 处理新增的属?40
4.3 vm.$delete 41
4.3.1 用法 42
4.3.2 实现原理 42
4.4 ȝ 45
W二 虚拟DOM
W?章 虚拟DOM?48
5.1 什么是虚拟DOM 48
5.2 Z么要引入虚拟DOM 51
5.3 Vue.js中的虚拟DOM 51
5.4 ȝ 53
W?章 VNode 54
6.1 什么是VNode 54
6.2 VNode的作?55
6.3 VNode的类?56
6.3.1 注释节点 57
6.3.2 文本节点 57
6.3.3 克隆节点 57
6.3.4 元素节点 58
6.3.5 lg节点 59
6.3.6 函数式组?59
6.4 ȝ 59
W?章 patch 60
7.1 patch介绍 60
7.1.1 新增节点 61
7.1.2 删除节点 62
7.1.3 更新节点 63
7.1.4 结 63
7.2 创徏节点 64
7.3 删除节点 67
7.4 更新节点 68
7.4.1 静态节?68
7.4.2 新虚拟节Ҏ(gu)文本属?69
7.4.3 新虚拟节Ҏ(gu)文本属?69
7.4.4 结 70
7.5 更新子节?72
7.5.1 更新{略 72
7.5.2 优化{略 77
7.5.3 哪些节点是未处理q的 82
7.5.4 结 83
7.6 ȝ 86
W三 模板~译原理
W?章 模板~译 88
8.1 概念 88
8.2 模板编译成渲染函数 89
8.2.1 解析?90
8.2.2 优化?91
8.2.3 代码生成?91
8.3 ȝ 92
W?章 解析?93
9.1 解析器的作用 93
9.2 解析器内部运行原?94
9.3 HTML解析?99
9.3.1 q行原理 100
9.3.2 截取开始标{?101
9.3.3 截取l束标签 107
9.3.4 截取注释 108
9.3.5 截取条g注释 108
9.3.6 截取DOCTYPE 109
9.3.7 截取文本 109
9.3.8 U文本内容元素的处理 112
9.3.9 使用栈维护DOM层 114
9.3.10 整体逻辑 114
9.4 文本解析?117
9.5 ȝ 121
W?0章 优化?122
10.1 扑և所有静态节点ƈ标记 125
10.2 扑և所有静态根节点q标?127
10.3 ȝ 129
W?1章 代码生成?130
11.1 通过AST生成代码字符?131
11.2 代码生成器的原理 134
11.2.1 元素节点 134
11.2.2 文本节点 136
11.2.3 注释节点 137
11.3 ȝ 137
W四 整体程
W?2章 架构设计与项目结?140
12.1 目录l构 140
12.2 架构设计 143
12.3 ȝ 145
W?3章 实例Ҏ(gu)与全局API?nbsp;
实现原理 146
13.1 数据相关的实例方?147
13.2 事g相关的实例方?147
13.2.1 vm.$on 148
13.2.2 vm.$off 149
13.2.3 vm.$once 152
13.2.4 vm.$emit 153
13.3 生命周期相关的实例方?154
13.3.1 vm.$forceUpdate 154
13.3.2 vm.$destroy 155
13.3.3 vm.$nextTick 159
13.3.4 vm.$mount 169
13.4 全局API的实现原?178
13.4.1 Vue.extend 178
13.4.2 Vue.nextTick 182
13.4.3 Vue.set 183
13.4.4 Vue.delete 183
13.4.5 Vue.directive 184
13.4.6 Vue.filter 185
13.4.7 Vue.component 186
13.4.8 Vue.use 188
13.4.9 Vue.mixin 189
13.4.10 Vue.compile 190
13.4.11 Vue.version 190
13.5 ȝ 191
W?4章 生命周期192
14.1 生命周期囄 192
14.1.1 初始化阶D?193
14.1.2 模板~译阶段 194
14.1.3 挂蝲阶段 194
14.1.4 卸蝲阶段 194
14.1.5 结 194
14.2 从源码角度了解生命周?195
14.3 errorCaptured与错误处?199
14.4 初始化实例属?203
14.5 初始化事?204
14.6 初始化inject 208
14.6.1 provide/inject的用方?208
14.6.2 inject的内部原?210
14.7 初始化状?215
14.7.1 初始化props 216
14.7.2 初始化methods 224
14.7.3 初始化data 225
14.7.4 初始化computed 228
14.7.5 初始化watch 238
14.8 初始化provide 241
14.9 ȝ 241
W?5章 指o(h)的奥U?242
15.1 指o(h)原理概述 242
15.1.1 v-if指o(h)的原理概q?243
15.1.2 v-for指o(h)的原理概q?243
15.1.3 v-on指o(h) 244
15.2 自定义指令的内部原理 246
15.3 虚拟DOM钩子函数 250
15.4 ȝ 251
W?6章 qo(h)器的奥秘 252
16.1 qo(h)器原理概q?253
16.1.1 串联qo(h)?254
16.1.2 滤器接收参数 254
16.1.3 resolveFilter的内部原?255
16.2 解析qo(h)?256
16.3 ȝ 258
W?7章 最?jng)_?259
17.1 为列表渲染设|属性key 259
17.2 在v-if/v-if-else/v-else中用key 259
17.3 路由切换lg不变 260
17.3.1 路由D守卫beforeRouteUpdate 261
17.3.2 观察 $route对象的变?261
17.3.3 为router-viewlgd属性key 262
17.4 为所有\q一dquery 262
17.4.1 使用全局守卫beforeEach 263
17.4.2 使用函数劫持 263
17.5 区分Vuex与props的用边?264
17.6 避免v-if和v-for一起?264
17.7 为组件样式设|作用域 266
17.8 避免在scoped中用元素选择?267
17.9 避免隐性的父子lg通信 268
17.10 单文件组件如何命?268
17.10.1 单文件组件的文g名的大小?268
17.10.2 基础lg?269
17.10.3 单例lg?270
17.10.4 紧密耦合的组件名 270
17.10.5 lg名中的单词顺?271
17.10.6 完整单词的组件名 272
17.10.7 lg名ؓ(f)多个单词 273
17.10.8 模板中的lg名大写 273
17.10.9 JS/JSX中的lg名大写 274
17.11 自闭合组?275
17.12 prop名的大小?276
17.13 多个Ҏ(gu)的元素 276
17.14 模板中简单的表达?276
17.15 单的计算属?277
17.16 指o(h)~写 278
17.17 良好的代码顺?278
17.17.1 lg/实例的选项的顺?278
17.17.2 元素Ҏ(gu)的序 280
17.17.3 单文件组仉U元素的序 281
17.18 ȝ 282