构造器-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渲染组件,就手动销毁
手动挂载模板的好处就是
