Web Vue 组件挂载方法
组件挂载
所有的 Vue 组件都是 Vue 实例.
具体看生命周期: https://cn.vuejs.org/v2/guide/instance.html#%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E5%9B%BE%E7%A4%BA
1. new Vue(...),创建实例
2. data ready,event loop, watch ready (created)
3. el指定了元素,或者mount手动,才会开始编译.(此时dom对应的el没有元素)
4. 编译template or outerHtml为render函数.
优先级render函数>template选项>outer Html,
render函数开始渲染;
渲染完成,将得到1个对应的virtual dom.(mounted)
5. vue实例对象添加$el成员,并且替换掉el的DOM元素. 一旦$el变化,就引起dom变化,响应式的核心.
6. 监控数据变化(data<->$el),变化触发重新render, virtual dom通过patch函数,将变化的部分改动到dom tree上(updated)
7. 对象销毁(destroyed)
指定 el
全局 Vue 实例化后,挂载到 id=app 的元素,并替换它:
new Vue {
el: '#app'
...
}
<div id="app">
<author-header
:author-info="authorInfo"
:me-id="meId"
:me-follow="meFollow"
:post-info="postInfo"
>
</author-header>
<post-content-vue :post-info="postInfo">
<comment-pagination
:post-info="postInfo"
ref="cmt_page_r"
></comment-pagination>
</post-content-vue>
</div>
mount 指定 HtmlElement
new Vue {
...
}.mount('#app')
手动 mount
const MessageInstance = new Vue({
data: _props,
render(h) {
return h(Message, {
props: _props
});
}
});
//此时构建的component.$el还未加入文档
const component = MessageInstance.$mount();
//dom操作加入某个位置
document.body.appendChild(component.$el);
或者用Vue.extend:
//Main是vue组件
let MessageConstructor = Vue.extend(Main);
//可添加自己的属性
instance = new MessageConstructor({
data: options
});
//手动挂载
instance.vm = instance.$mount();
//手动添加$el到dom
document.body.appendChild(instance.vm.$el);