当前位置:首页 > uni-app

uniapp公共弹窗

2026-02-05 21:46:15uni-app

实现全局弹窗组件

在uniapp中实现公共弹窗可以通过自定义组件方式完成。创建一个全局组件,在需要的地方调用。

创建components/popup/popup.vue文件:

<template>
  <view class="popup-mask" v-if="show" @click="close">
    <view class="popup-content" @click.stop>
      <slot></slot>
    </view>
  </view>
</template>

<script>
export default {
  props: {
    show: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    close() {
      this.$emit('update:show', false)
    }
  }
}
</script>

<style>
.popup-mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom:  0;
  background-color: rgba(0,0,0,0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 999;
}
.popup-content {
  background-color: #fff;
  border-radius: 10rpx;
  padding: 30rpx;
  width: 80%;
}
</style>

全局注册组件

main.js中全局注册组件:

uniapp公共弹窗

import Vue from 'vue'
import popup from '@/components/popup/popup.vue'

Vue.component('popup', popup)

页面中使用弹窗

在任何页面中可以直接使用:

<template>
  <view>
    <button @click="showPopup = true">打开弹窗</button>
    <popup :show.sync="showPopup">
      <view>这里是弹窗内容</view>
      <button @click="showPopup = false">关闭</button>
    </popup>
  </view>
</template>

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

通过Vuex管理弹窗状态

对于复杂应用,可以使用Vuex集中管理弹窗状态:

uniapp公共弹窗

// store.js
export default new Vuex.Store({
  state: {
    popupVisible: false,
    popupContent: ''
  },
  mutations: {
    showPopup(state, content) {
      state.popupVisible = true
      state.popupContent = content
    },
    hidePopup(state) {
      state.popupVisible = false
    }
  }
})

通过方法调用弹窗

创建全局弹窗服务:

// utils/popup.js
export default {
  show(content) {
    uni.$emit('showPopup', content)
  },
  hide() {
    uni.$emit('hidePopup')
  }
}

在App.vue中监听:

<script>
export default {
  created() {
    uni.$on('showPopup', (content) => {
      this.$store.commit('showPopup', content)
    })
    uni.$on('hidePopup', () => {
      this.$store.commit('hidePopup')
    })
  }
}
</script>

使用时直接调用:

import popup from '@/utils/popup.js'

popup.show('自定义内容')
// 关闭
popup.hide()

注意事项

组件样式需要根据实际需求调整,包括动画效果、位置等。对于多弹窗场景,可以扩展组件支持不同类型弹窗。弹窗内容可以通过插槽或props灵活传递。

标签: uniapp
分享给朋友:

相关文章

uniapp隐藏右侧滚动条

uniapp隐藏右侧滚动条

隐藏右侧滚动条的方法 在UniApp中隐藏右侧滚动条可以通过CSS样式实现,适用于H5、小程序等平台。以下是几种常见的方法: 全局样式设置 在App.vue的全局样式中添加以下CSS代码,适用于所有…

uniapp擎

uniapp擎

uniapp 引擎简介 uniapp 是一个基于 Vue.js 的开发框架,允许开发者使用一套代码同时构建跨平台应用(如 iOS、Android、H5、小程序等)。其核心引擎负责将 Vue 语法转换为…

uniapp 线程

uniapp 线程

uniapp 线程的概念 在 uniapp 中,线程的概念与原生应用开发有所不同。由于 uniapp 是基于 JavaScript 的运行环境,它并不直接支持多线程操作。JavaScript 本身是单…

甜uniapp

甜uniapp

甜uniapp的定义 甜uniapp并非官方术语,可能是对uniapp开发中“高效、便捷、愉悦”体验的形容,或特定场景下的优化方案。通常指通过技巧、插件或架构设计提升uniapp开发效率和用户体验。…

uniapp怎么授权

uniapp怎么授权

uniapp 授权流程 uniapp 的授权流程通常涉及获取用户权限(如地理位置、摄像头、麦克风等)或第三方平台授权(如微信、支付宝登录)。以下是常见授权场景的实现方法: 获取用户设备权限(如相机、…

uniapp多行注释

uniapp多行注释

uniapp多行注释方法 在UniApp中,多行注释的语法与JavaScript一致,可以使用以下两种方式实现多行注释。 方法一:使用/* */符号 通过/*开始注释,*/结束注释,中间的内容会被视…