uni-app getCurrentPages的onLoad()报错,app内提示没有该方法,小程序正常

uni-app getCurrentPages的onLoad()报错,app内提示没有该方法,小程序正常

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 window10
HBuilderX类型 正式
HBuilderX版本号 3.2.16
手机系统 Android
手机系统版本号 Android 10
手机厂商 vivo
手机机型 X50
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码:

const pages = getCurrentPages();  
const curPage = pages[pages.length - 1];  
curPage.onLoad()

操作步骤:

  • vue3, cli安装

预期结果:

  • onLoad能正常使用

实际结果:

  • 没有onLoad函数

bug描述:

getCurrentPages()获取到当前页面curPage后,执行curPage.onLoad()方法,结果在app内报错,提示onLoad不是一个函数。此方法在小程序内是可用的。

经分析,在app内,通过getCurrentPages获取的页面的属性下(不认是哪个子属性),都没有任何事件或方法,小程序则有。


更多关于uni-app getCurrentPages的onLoad()报错,app内提示没有该方法,小程序正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

非Bug,不提供此类使用方式,生命周期函数是框架触发的,不要自己主动调用,如果要调用页面方法,请定义在methods中调用

更多关于uni-app getCurrentPages的onLoad()报错,app内提示没有该方法,小程序正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是uni-app在App端和小程序端的实现差异问题。在App端,通过getCurrentPages()获取的页面对象结构与小程序端不同。

解决方案:

  1. 对于App端,可以直接使用Vue的生命周期钩子,如onMounted等,而不是依赖页面栈的onLoad方法。

  2. 如果需要兼容多端,可以这样判断:

const pages = getCurrentPages();
const curPage = pages[pages.length - 1];
if(curPage.$vm && curPage.$vm.onLoad) {
    curPage.$vm.onLoad();
}
  1. 或者在App端使用Vue3的composition API:
import { onMounted } from 'vue'

onMounted(() => {
    // 替代onLoad的逻辑
})
回到顶部