Vue3 封装组件库 挂载全局

问题

我是看网上大部分说的Vue2.xVue.prototype 应该换成以下写法

import toast from './scripts/toast';
import { createApp } from 'vue'
import App from './App.vue'
export default {
  version: '1.0.0',
  author: 'lzh',
  install: function (Vue) {
    const app = createApp(App);
    app.config.globalProperties.$toast = toast;
  }
}
import { getCurrentInstance, onMounted } from "vue";
export default {
  setup( ) {
    const { ctx } = getCurrentInstance(); //获取上下文实例
    onMounted(() => {
      console.log(ctx, "ctx");
      ctx.$toast('测试');
    });
  },
};

但是结果并不能使用

报错信息

$toast is undefined

于是我想起了Vue.use默认执行插件的install方法并传入Vue当前实例
所以我打印了一下Vue


打印结果

发现了端倪
然后将代码改成这样就可以啦

import toast from './scripts/toast';
export default {
  version: '1.0.0',
  author: 'lzh',
  install: function (Vue) {
    // toast Fn
    Vue.config.globalProperties.$Toast = toast;
  }
}

注意:使用getCurrentInstance()时候要注意尽量别使用里边的ctx属性 打包后容易出错,尤大大推荐使用内部的 proxy

    const { proxy } = getCurrentInstance();
    proxy.$toast('测试成功');
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容