uniapp 小程序注册全局弹窗组件(无需引入,无需写标签)

由于uniapp没有开放根节点,所以一般情况下通过app.components注册,在需要的页面直接写组件标签,但是如果每个页面都需要的话,再每个都加的话会非常的麻烦

网上的思路都不咋地:

1.通过写一个透明弹窗页面来实现,亲测页面透明设置无效。

2.通过编写全局组件每个页面都引入,非常不方便。


这里采用vite插件实现,这里满足uniapp+Vue3+vite 目前小程序测试没有问题

安装插件

html 复制代码
npm i @yck-web/vite-plugin-template-inset 

配置:

javascript 复制代码
//修改配置vite.config.js, plugins中添加插件(位置需要放在uni()方法前面)
import uni from "@dcloudio/vite-plugin-uni";
  import vitePluginTemplateInset from "@yck-web/vite-plugin-template-inset";

  plugins: [
     vitePluginTemplateInset(['<GlobalDialog ref=\'GlobalDialog\'></GlobalDialog>']),
     uni(),
  ],
javascript 复制代码
//main.js全局注册

import GlobalDialog from '@/components/GlobalDialog'

app.component('GlobalDialog', GlobalDialog)
html 复制代码
<!-- 弹窗口组件 -->
<template name="globalDialog">
  <view class="mask position-fixed bg-#000 opacity-60% w-100vh h-100vh" style="z-index:1" v-if="show">
		mask
  </view>
</template>


<script setup lang="ts">
import { ref } from "vue";

let show = ref(false);

const open = () => {
  show.value = true;
};
const close = () => {
  show.value = false;
};


//暴露open和close方法
defineExpose({
  open,
  close,
});
</script>
<style lang="scss" scoped>

</style>
javascript 复制代码
//页面使用
const instance = getCurrentInstance()
const showGlobalPop = () => {
		instance?.refs?.GlobalDialog?.open();
	}
相关推荐
泥菩萨^_^10 分钟前
【每天认识一个漏洞】React 和 Next.js RCE漏洞
前端·javascript·react.js
m0_4711996312 分钟前
【vue】收银界面离线可用,本地缓存订单,网络恢复后同步
网络·vue.js·缓存
1024肥宅16 分钟前
JavaScript常用设计模式完整指南
前端·javascript·设计模式
董世昌4123 分钟前
js怎样控制浏览器前进、后退、页面跳转?
开发语言·前端·javascript
走,带你去玩24 分钟前
uniapp live-pusher + 腾讯云直播
前端·javascript·uni-app
徐同保27 分钟前
electron打包项目
前端·javascript·electron
Maybyy30 分钟前
如何在项目里面添加一个可以左右翻动并显示指定日期的日历
前端·vue.js
前端 贾公子32 分钟前
Vite 如何优化项目的图片体积
vue.js
柯南二号35 分钟前
【大前端】【Android】用 Python 脚本模拟点击 Android APP —— 全面技术指南
android·前端·python
Arvin_Rong36 分钟前
前端动态 API 生成与封装:前端 API 调用的一种思路
前端