上篇文章写到了执行 Vue 的时候,会去执行 _init 内部方法,在 _init 方法挂载钩子 created 之前会生成对 data 的数据监听。
callHook(vm, \\\'beforeCreate\\\')
callHook(vm, \\\'created\\\')
在 beforeCreate 和 created 钩子中间有一个方法 initState(vm) 会去执行初始化 data 数据并且添加监听。
执行完 created 钩子,会继续执行:
if (vm.$options.el) {
vm.$mount(vm.$options.el)
}
执行内部方法 $.mount 传入参数 el ,这个 vm 就是我们的 Vue 实例,而 $mount 和 $.options 都是内部方法。
继续执行,我们进入 entry-runtime-with-compiler.js 页面
src/platforms/web/entry-runtime-with-compiler.js
el = el && query(el);
export function query (el: string | Element): Element {
if (typeof el === \\\'string\\\') {
const selected = document.querySelector(el)
...
return selected
}
}
if (el === document.body || el === document.documentElement) {
process.env.NODE_ENV !== \\\'production\\\' && warn(
`Do not mount Vue to <html> or <body> - mount to normal elements instead.`
)
return this
}
再随后判断你有没有写 template 模板,如果写了就去执行 idToTemplate (也需要转成 render 函数),如果没写就去获取「序列化HTML」,获取出来的是字符串。
序列化的字符串
const compiled = baseCompile(template.trim(), finalOptions)
返回的数据
生成的 AST 树格式
推荐阅读
HTTP 协议的请求头和响应头
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34557.html