男胖友de部落格

动态创建vue实例

· nanpangyou

动态创建一个vue实例

在写toast组件时,需要在toastPlugin中使用toast.vue文件动态创建一个vue实例,将toast组件以及相关的样式加载进来(当然也可以使用document.createElement来做,但是原生dom无法使用vue组件的生命周期)

此时则需要在pulgin中动态创建一个vue实例

步骤:

  1. 引入toast.vue文件
  2. 使用Vue.extend创建构造函数
  3. new一个vue实例
  4. 设置相关的属性(比如slot,事件监听等)
  5. mount到内存中
  6. append到页面中

代码示例

import Toast from "./toast";
export default {
  install(Vue, options) {
    Vue.prototype.$toast = function(message,props) {
      let ToastConstructor = Vue.extend(Toast);
      let toast = new ToastConstructor({
        propsData: {...props}
      });
      toast.$slots.default = [message];
      toast.$mount();
      document.body.appendChild(toast.$el);
    };
  }
};