采用vuex更新一个弹出框的显隐问题

最近想做一个地图上点击,然后出现对话框显示数据的功能,由于地图和对话框是兄弟组件,打算采用vuex进行一个状态的管理,使得能在两个组件中共同控制。

错误方法:

从这里可以看到vuex确实变化了,但是对话框还是显示

正确做法

采用这个方法后弹出框消失了

### 微信小程序实现弹出框组件的示例与教程 #### 1. 自定义弹窗组件基础 通过创建一个简单的自定义弹窗组件,可以满足在页面中点击按钮触发显示弹窗的需求。这种弹窗可以根据具体业务场景调整样式和内容[^1]。 以下是基于微信小程序框架的一个简单弹窗组件示例: ```javascript // components/popup/index.js Component({ properties: { showPopup: { type: Boolean, value: false } }, methods: { onClose() { this.triggerEvent('closepopup'); } } }); ``` ```html <!-- components/popup/index.wxml --> <view class="popup-overlay" hidden="{{!showPopup}}"> <view class="popup-content"> <text>这是弹窗的内容</text> <button bindtap="onClose">关闭</button> </view> </view> ``` ```css /* components/popup/index.wxss */ .popup-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; } .popup-content { background-color: white; padding: 20px; border-radius: 8px; } ``` 此代码片段展示了一个基本的弹窗逻辑,其中 `properties` 定义了控制弹窗的状态变量 `showPopup`,并通过事件机制通知父级组件更新状态。 --- #### 2. 使用 UniApp-Vue3 构建更复杂的弹出选择器 如果希望构建更加复杂的功能型弹出框(如选项选择),可以借助 **UniApp** 和 **Vue3** 的能力开发跨平台兼容的选择器组件。例如,`wo-pop-selector` 是一款支持 H5 和微信小程序的弹出选择组件[^2]。 以下是一个简化版的 Vue3 风格实现思路: ```vue <template> <view v-if="visible" class="pop-selector"> <view class="selector-mask" @click="handleClose"></view> <view class="selector-container"> <picker mode="selector" :range="options" @change="handleChange">{{ selected }}</picker> </view> </view> </template> <script setup> import { ref } from 'vue'; const visible = ref(false); const options = ['选项一', '选项二', '选项三']; const selected = ref(''); function openSelector() { visible.value = true; } function handleClose() { visible.value = false; } function handleChange(e) { const index = e.detail.value; selected.value = options[index]; } </script> <style scoped> .pop-selector { position: relative; } .selector-mask { position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.7); } .selector-container { margin-top: 20px; text-align: center; } </style> ``` 上述代码展示了如何利用 Vue3 的响应式特性快速搭建一个带有遮罩层的下拉选择器。 --- #### 3. 气泡菜单组件的应用 对于某些特定场景下的交互设计,比如模仿微信消息界面中的气泡菜单功能,则可以通过监听目标元素的位置动态渲染气泡菜单位置[^3]。 下面提供一段核心逻辑作为参考: ```javascript Page({ data: { menuVisible: false, menuPosition: {} }, toggleMenu(event) { const rect = event.currentTarget.getBoundingClientRect(); this.setData({ menuVisible: !this.data.menuVisible, menuPosition: { x: rect.left + rect.width / 2, y: rect.top - 50 } }); }, hideMenu() { this.setData({ menuVisible: false }); } }); ``` ```html <button catchtap="toggleMenu">点击显示菜单</button> <view wx:if="{{menuVisible}}" style="position:absolute;transform:translateX({{menuPosition.x}}px); translateY({{menuPosition.y}}px)"> <!-- 菜单项 --> </view> ``` 该方法适用于需要精准定位的小范围操作提示或快捷工具栏的设计需求。 --- #### 总结 无论是基础弹窗还是高级交互组件,在微信小程序生态内均有成熟的解决方案可供借鉴。开发者可根据项目实际情况灵活选用原生 API 或第三方库完成所需功能模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值