当前位置:   article > 正文

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

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

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

网上的思路都不咋地:

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

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


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

安装插件

npm i @yck-web/vite-plugin-template-inset 

 配置:

  1. //修改配置vite.config.js, plugins中添加插件(位置需要放在uni()方法前面)
  2. import uni from "@dcloudio/vite-plugin-uni";
  3. import vitePluginTemplateInset from "@yck-web/vite-plugin-template-inset";
  4. plugins: [
  5. vitePluginTemplateInset(['<GlobalDialog ref=\'GlobalDialog\'></GlobalDialog>']),
  6. uni(),
  7. ],
  1. //main.js全局注册
  2. import GlobalDialog from '@/components/GlobalDialog'
  3. app.component('GlobalDialog', GlobalDialog)
  1. <!-- 弹窗口组件 -->
  2. <template name="globalDialog">
  3. <view class="mask position-fixed bg-#000 opacity-60% w-100vh h-100vh" style="z-index:1" v-if="show">
  4. mask
  5. </view>
  6. </template>
  7. <script setup lang="ts">
  8. import { ref } from "vue";
  9. let show = ref(false);
  10. const open = () => {
  11. show.value = true;
  12. };
  13. const close = () => {
  14. show.value = false;
  15. };
  16. //暴露open和close方法
  17. defineExpose({
  18. open,
  19. close,
  20. });
  21. </script>
  22. <style lang="scss" scoped>
  23. </style>
  1. //页面使用
  2. const instance = getCurrentInstance()
  3. const showGlobalPop = () => {
  4. instance?.refs?.GlobalDialog?.open();
  5. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/848705
推荐阅读
相关标签
  

闽ICP备14008679号