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();
	}
相关推荐
凌乱风雨121110 分钟前
从源码角度解析C++20新特性如何简化线程超时取消
前端·算法·c++20
两个西柚呀13 分钟前
每日前端面试题-css塌陷
前端·css
IT_陈寒16 分钟前
Vite 5大实战优化技巧:让你的开发效率提升200%|2025前端工程化指南
前端·人工智能·后端
C_心欲无痕19 分钟前
react - createPortal魔法传送门
javascript·vue.js·react.js
未来之窗软件服务25 分钟前
幽冥大陆(八十八 ) 操作系统应用封装技术C#自解压 —东方仙盟练气期
java·前端·c#·软件打包·仙盟创梦ide·东方仙盟·阿雪技术观
沛沛rh452 小时前
React 学习笔记:State、hook —— 组件的记忆
前端·javascript·react.js
0和1的舞者9 小时前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
web小白成长日记9 小时前
在Vue样式中使用JavaScript 变量(CSS 变量注入)
前端·javascript·css·vue.js
QT 小鲜肉9 小时前
【Linux命令大全】001.文件管理之which命令(实操篇)
linux·运维·服务器·前端·chrome·笔记
C_心欲无痕9 小时前
react - useImperativeHandle让子组件“暴露方法”给父组件调用
前端·javascript·react.js