uni-app nuve 预加载页面tabbar切换不触发onshow

uni-app nuve 预加载页面tabbar切换不触发onshow

项目信息 详细信息
产品分类 uniapp/App
PC开发环境 Mac
PC开发环境版本 macos 15.4
HBuilderX类型 正式
HBuilderX版本 3.2.16
手机系统 全部
手机厂商 华为
页面类型 nvue
Vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

测试过的手机:

  • 小米mix2
  • iphone5s

操作步骤:

  • nuve tabbar切换不触发onshow

预期结果:

  • tabbar切换触发onshow

实际结果:

  • tabbar切换 不能触发onshow

bug描述:

  • nuve 预加载页面切换不触发onshow. 切换时只触发onhide

更多关于uni-app nuve 预加载页面tabbar切换不触发onshow的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

在 nvue 页面中,由于渲染机制与 vue 页面不同,预加载的页面在 tabbar 切换时确实可能不会触发 onShow 生命周期。这是因为 nvue 页面基于原生渲染,页面实例在预加载后可能处于“保持”状态,而非完全隐藏/显示。

原因分析:

  1. nvue 页面在首次加载后,如果被预加载,切换 tab 时页面实例可能未被销毁,因此不会重新触发 onShow
  2. 原生渲染层对页面生命周期的管理策略与 vue 页面不同,尤其涉及预加载时,onShow 可能仅在初次进入时触发。

解决方案:

  1. 使用 onTabItemTap 监听
    在页面中监听 onTabItemTap 生命周期,该事件在点击 tabbar 时触发,可在此执行原本放在 onShow 中的逻辑。

    onTabItemTap(item) {
      console.log('tab 切换', item)
      // 执行数据刷新等操作
    }
    
  2. 通过全局事件通信
    使用 uni.$emituni.$on 在 tabbar 切换时跨页面通知。

    • 在 tabbar 页面切换时触发全局事件:
      // 在 app.vue 或公共模块监听 tabbar 切换
      uni.onTabBarMidButtonTap(() => {
        uni.$emit('tabChange')
      })
      
    • 在目标页面监听事件:
      uni.$on('tabChange', () => {
        // 执行刷新逻辑
      })
回到顶部