构造器-extend&手动挂载$mount
1、写.vue文件进行页面渲染的特点
- 所有的内容,都是在
#app
节点内渲染的; - 组件的模板,是事先定义好的;
- 由于组件的特性,注册的组件只能在当前位置渲染。
一些特殊的场景无法满足:
- 组件的模板是通过调用接口从服务端获取的,需要动态渲染组件;
(组件是异步的,甚至预先不知道模板是啥)
- 实现类似原生
window.alert()
的提示框组件,它的位置是在<body>
下,而非<div id="app">
,并且不会通过常规的组件自定义标签的形式使用,而是像 JS 调用函数一样使用。
使用extend创建动态模板:
import Vue from 'vue';
# extend:基于vue创建子类,data和组件一样 需要是函数
# 以此创建构造器,可以解决异步获取模板的问题
const AlertComponent = Vue.extend({
template: '<div>{{ message }}</div>',
data () {
return {
message: 'Hello, Aresn'
};
},
});
# 使用$mount手动渲染 data 注入到 模板里
const component = new AlertComponent().$mount();
# 挂载在真实dom上
document.body.appendChild(component.$el);
简写:
new AlertComponent().$mount('#app');
new AlertComponent({ el: '#app' });
使用render函数:
import Vue from 'vue';
import Notification from './notification.vue';
const props = {}; // 这里可以传入一些组件的 props 选项
# 创建实例
const Instance = new Vue({
render (h) {
return h(Notification, {
props: props
});
}
});
const component = Instance.$mount();
document.body.appendChild(component.$el);
# 操作 Render 的 Notification 实例
因为 Instance 下只 Render 了 Notification 一个子组件,所以可以用 $children[0] 访问到。
const notification = Instance.$children[0];
当然手动$mount渲染组件,就手动销毁
手动挂载模板的好处就是