微信小程序使用vant4 weapp自定义菜单 但是弹出层却被菜单遮挡的解决办法

最终方案:通过 getTabBar() 直接控制自定义组件显隐

核心思路:wx.hideTabBar() 对自定义 tabBar 不生效,改用 this.getTabBar() 拿到组件实例,直接改其 data,再由 wx:if 驱动显隐。


涉及 3 个文件、共 4 处改动:

① custom-tab-bar/index.js --- 第 5 行、第 18-19 行

javascript

复制代码
data: {
  visible: true,   // ← 新增:显隐开关
  // ...
},

pageLifetimes: {
  show() {
    this.setData({ visible: true })  // ← 新增:每次进页面自动恢复
    // ...
  }
}

② custom-tab-bar/index.wxml --- 第 1 行

xml

复制代码
<!-- 原来 -->
<view class="tab-bar" wx:if="{{userType}}">

<!-- 改为 -->
<view class="tab-bar" wx:if="{{userType && visible}}">

③ guarantee-mission.js --- 第 117-120 行、第 143-148 行

javascript

复制代码
// 打开弹窗 → 隐藏菜单
onShowGuaranteeMissionDetail(e) {
  // ...
  const tabBar = this.getTabBar()
  if (tabBar) {
    tabBar.setData({ visible: false })  // 菜单消失
  }
  this.setData({ showGuaranteeMissionDetail: true })  // 弹出弹窗
}

// 关闭弹窗 → 恢复菜单
onCloseGuaranteeMissionDetail() {
  const tabBar = this.getTabBar()
  if (tabBar) {
    tabBar.setData({ visible: true })   // 菜单恢复
  }
  this.setData({ showGuaranteeMissionDetail: false })
}

执行效果

code

复制代码
点击卡片 → getTabBar() 获取组件 → setData({visible: false})
         → wx:if 条件变 false → 底部菜单从 DOM 移除
         → 弹窗弹出

关闭弹窗 → getTabBar() → setData({visible: true})
         → wx:if 条件变 true → 底部菜单恢复

这就是最终生效的方案。


进一步改进:使用监听的方式,不用一个个写:

核心原理就是 observers 数据监听:当任意一个 showXxxPopup 从 false 变为 true 时,observer 自动触发,将 tabBar 设为 hidden;当所有弹窗都恢复 false 时,tabBar 自动恢复。

两种实现:

页面 方式

任务页 独立 behavior tab-bar-control.js,监听 30+ 个弹窗字段

首页 直接在 Page 的 observers 里监听 showDetailPopup, showPunchModal

这样做的好处:

各 behavior 不再需要手动写 getTabBar().setData({ visible: ... }) --- 已全部删除

以后新增弹窗,只需在 observer 的字段列表里加一个名字即可

相关推荐
长沙三为智能科技10 小时前
家政小程序门店运营模块设计:会员、下单、派单、结算四段链路的落地拆解
python·小程序·内容运营
weixin_1772972206912 小时前
回收小程序做自营还是撮合?先看你手里有什么
小程序
andrsted13 小时前
练题簿在线免费刷题:Word、PDF 导题与预览补全,把现成资料变成可练习题库
微信小程序·小程序·pdf·word·学习方法·刷题
AI行业应用研究13 小时前
会务信息载体的演进:纸质、PDF 与结构化数据源的分发成本与版本一致性
大数据·人工智能·安全·小程序·架构·pdf
Geek_Vison13 小时前
保险APP已经用了Flutter,还能接入小程序吗?
flutter·小程序·uni-app·mpaas·小程序容器
计算机毕设定制辅导-无忧学长14 小时前
《校园食堂在线订餐小程序的设计与实现》
java·vue.js·spring boot·微信小程序·uniapp·校园食堂在线订餐小程序
FX1317887KP_1 天前
从KET到PET口语进阶:词汇量翻倍后,口语如何跟上?
小程序·ket口语·pet口语·fce备考·剑桥英语
m0_587383001 天前
工业场景设备维修维护实战技巧 全流程标准化落地与常见问题排查指南
java·spring·小程序·架构·需求分析
m0_587383002 天前
深圳 24 小时自助健身房系统软件开发实战指南与案例解析
java·spring boot·小程序·架构·需求分析