【Vue】指令调用的全局组件

一、需求

多个页面需要使用同一个组件,页面文件多的情况下使用import方式页面会导致重复代码过多,所以这里采用了全局组件的方法,并且可以通过全局指令调用,使用方式与element的message组件相同

二、代码实现

模仿element的message组件,定义一个全局的抽屉组件,完整的组件文件结构:
在这里插入图片描述
定义组件,和正常封装一个组件一样,只是这里我们不直接放到页面的vue文件使用(main.vue)

<template>
  <el-drawer
    direction="rtl"
    :visible.sync="drawer"
    title="我是标题">
    <span>我来啦!</span>
  </el-drawer>
</template>

<script>
  export default {
    data() {
      return {
        drawer: false
      }
    }
  };
</script>

将定义好的组件通过Vue实例化,并将添加到根节点(main.js)

import Vue from "vue"; // 导入vue
import Main from './main.vue'vue // 导入组件

// 将组件作为参数,使用vue提供的全局方法,创建一个构造函数
let DrawerConstructor = Vue.extend(Main)

let instance;

const Drawer = function (options = {}){

  // 初始化实例,此时instance是一个组件实例,但未初始化未完成
  instance = new DrawerConstructor({
    data: options
  });

  // 完成初始化
  instance.$mount();

  // 将组件添加到根节点body
  document.body.appendChild(instance.$el);
}
Drawer.open = function (){
  Drawer()
  instance.visible = true;
}

export default Drawer

在index.js文件下导出

import Drawer from './src/main.js'
export default Drawer

全局定义(项目main.js)

// 导入自定义全局组件
import Drawer from "./components/drawer/index.js";
Vue.prototype.$drawer = Drawer

三、组件使用

this.$drawer.open()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值