微信小程序使用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 的字段列表里加一个名字即可

相关推荐
李纲明2 小时前
微信小程序真机预览白屏或 request 失败:先核 request 合法域名与 TLS,再查体验版与本地缓存
缓存·微信小程序·小程序·小程序开发·devdiy·真机预览·合法域名
klfdgl4 小时前
线上商城小程序投入测算,有成熟开发经验服务商的长期收益对比
小程序
一木 之林18 小时前
Dify学习笔记 03 · RAG检索增强生成:三代范式、评估与落地(第40-45、55-56集)
笔记·小程序·交互·dify
赵小哥要冲啦1 天前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
河北清兮网络科技1 天前
石家庄做一套企业知识库系统多少钱?2026 报价明细
小程序·短剧app·广告联盟
Ai-_Man1 天前
Coze扣子还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·1024程序员节
微订校园外卖平台1 天前
新手做校园外卖平台:小程序启动顺序与订单链路验收
小程序·外卖系统·本地生活·微订
计算机毕设定制辅导-无忧学长1 天前
《基于物品协同过滤的闲置书换购微信小程序设计开发》
java·vue.js·spring boot·微信小程序·uniapp·闲置书换购微信小程序·物品协同过滤算法
ngaiwe2 天前
AA我来算小程序实践:把付款人、承担人和结算状态分开建模
微信小程序
FX1317887KP_2 天前
KET口语Part 2看图对话怎么练?“观察—提问—回应”;三步法讲透
小程序·ket口语·pet口语·fce备考·剑桥英语