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()获取的页面对象结构与小程序端不同。
解决方案:
-
对于App端,可以直接使用Vue的生命周期钩子,如onMounted等,而不是依赖页面栈的onLoad方法。
-
如果需要兼容多端,可以这样判断:
const pages = getCurrentPages();
const curPage = pages[pages.length - 1];
if(curPage.$vm && curPage.$vm.onLoad) {
curPage.$vm.onLoad();
}
- 或者在App端使用Vue3的composition API:
import { onMounted } from 'vue'
onMounted(() => {
// 替代onLoad的逻辑
})