源码执行步骤
new Vue(options)
=> this._init(options)
=>mergeOptions
=>initLifecycle(vm)
=>initEvents(vm)
=>initRender(vm)
=>callHook(vm, 'beforeCreate')
=>initInjections(vm)
=>initState(vm) =>
=> initProps()
=> initMethod()
=> initData() => observe(data, true)
=> initComputed()
=> initWatch()
=> vm.$mount(vm.$options.el)
=> Vue.prototype.$mount 「src/platforms/web/entry-runtime-with-compiler.js」
=> { render, staticRenderFns } = compileToFunctions(template, ...)
=> { compile, compileToFunctions } = createCompiler(baseOptions)
=> parse(template, options)
=> optimize(ast, options)
=> {render, staticRenderFns} = generate(ast, options)
=> code = genElement(ast, state)
=> genData
=> data += `${genHandlers(el.events, false, state.warn)},`
=> mount.call()
=> Vue.prototype.$mount 「src/platforms/web/runtime/index.js」
=> mountComponent
=> updateComponent = function() { vm._update(vm._render(), hydrating) }
=> new Watcher(vm, updateComponent)
=> this.getter = updateComponent
=> this.get()
=> pushTarget
=> value = this.getter.call(vm, vm)
=> vm._update(vm._render(), hydrating)
=> vm._update(Vue.prototype._render())
=> Vue.prototype._update(Vue.prototype._render()) 「src/core/instance/lifecycle.js」
=> vm.__patch__
Vanilla JavaScript
- delegate 事件委托
- e.target <=> e.currentTarget
- typeof e.target
- element.webkitMatchesSelector
- 递归添加处理函数
- DOM 操作
- childNodes
- nodeType
Vue.js
- @click.native 与 @click
- v-if 与 v-show
- keep-alive
- keep-alive 在首页和detail页面的具体应用
<keep-alive :include=/xxx$/>
<router-view></router-view>
</keep-alive>
- 疑问:缓存到 cache 中的是 vnode 还是 真是的 dom 节点呢?如果是vdom,回退的时候,为何页面可以保持之前的状态,比如图标也是保持之前的形状呢?
ES6
- import 命令的提升效果,优先执行。在调试 vue 单文件的时候,console.log 打点如果在 import 前面,注意:console 会在 import 执行之后执行。