uni-app 预加载界面监听show事件,安卓正常,IOS只执行一次,切换tab无法继续监听

uni-app 预加载界面监听show事件,安卓正常,IOS只执行一次,切换tab无法继续监听

开发环境 版本号 项目创建方式
Mac 11.4 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:11.4

HBuilderX类型:正式

HBuilderX版本号:3.1.18

手机系统:iOS

手机系统版本号:IOS 14

手机厂商:苹果

手机机型:iphone8

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:
代码问题描述详见:https://ask.dcloud.net.cn/question/125571

### 操作步骤:

mui.plusReady(function() { var self = plus.webview.currentWebview(); self.addEventListener(‘show’,function() { console.log(‘show’); }); })

### 预期结果:
每次切换到有监听界面时,都该执行log输出。

### 实际结果:
安卓正常,IOS只能调试基座打开第一次切换可以监听到show事件,在点击切换tab无法监听

### bug描述:
预加载界面,通过plus.webview.show、hide来切换tab,在界面监听show事件,实现切换界面时候刷新;
安卓测试正常,切换时每次都能监听到show事件。
IOS测试过程中,启动调试基座第一次点击tab可以监听到show事件,后续切换tab,无法监听

更多关于uni-app 预加载界面监听show事件,安卓正常,IOS只执行一次,切换tab无法继续监听的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

只有根组件才有onShow的监听事件,要是你在页面套了组件,子组件是不会触发onShow的。可以在给子组件加上v-if,通过父组件的ohShow和onHide来控制子组件,子组件内部使用created或者mounted来处理onshow的操作
<template> <view> <view>我是根组件</view> <ChildComponent></ChildComponent> </view> </template>

<script> import ChildComponent from '.......' export default { components: { ChildComponent }, onSHow() { console.log('show') } } </script>

这种时候,本组件会触发onShow,ChildComponent组件内部的onShow就不会触发。

更多关于uni-app 预加载界面监听show事件,安卓正常,IOS只执行一次,切换tab无法继续监听的实战教程也可以访问 https://www.itying.com/category-93-b0.html


不好意思,不是很明白,如果是根组件和子组件的问题,为什么安卓没问题,IOS的不行呢?

在uni-app中,iOS平台对show事件的监听机制与Android存在差异。iOS的plus.webview在预加载页面时,show事件可能仅触发一次,这是由于iOS的Webview生命周期管理策略导致的。

针对此问题,建议改用页面生命周期钩子onShow替代plus的事件监听。在Vue页面的<script>部分直接使用:

export default {
  onShow() {
    console.log('页面显示');
    // 执行刷新逻辑
  }
}
回到顶部