uni-app subnvue重复创建,无法销毁
uni-app subnvue重复创建,无法销毁
测试过的手机:
- 华为
- 小米
操作步骤:
a 页面navigateTo进入b页面,b 页面再navigateTo进入另一个a页面,a页面中的subnvue会重复创建,新的a页面打开subnvue会把之前的a页面的subnvue也打开,且无法关闭,如退出登录(切换账号),relaunch到登录页,之前所有的打开过的subnvue都没有关闭,新的页面再打开会把之前的subnvue页面也调出来
预期结果:
关闭页面销毁子窗体,当前页打开当前页的子窗体
实际结果:
未销毁,且会打开之前所有的子窗体
bug描述:
subnvue子窗体无法销毁,重复创建
| 信息类型 | 详细信息 |
|------------------|--------------|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | 10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.1.9 |
| 手机系统 | 全部 |
| 手机厂商 | 华为 |
| 页面类型 | nvue |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
更多关于uni-app subnvue重复创建,无法销毁的实战教程也可以访问 https://www.itying.com/category-93-b0.html
已找到解决方案(在有subbnvue子窗体的页面生命周期函数destroyed执行subNvue.close()方法进行销毁)
更多关于uni-app subnvue重复创建,无法销毁的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个方法没有看到文档说明呢
这是一个典型的subnvue生命周期管理问题。在uni-app中,subnvue的销毁需要手动处理,特别是在页面跳转时。
当使用navigateTo从a到b再到a时,第一个a页面并未被销毁,其subnvue实例仍然存在。新打开的a页面创建subnvue时,之前的实例也会被激活。
解决方案:
- 在页面onHide或onUnload中主动销毁subnvue:
onUnload() {
// 获取subnvue实例并销毁
const subNVue = uni.getSubNVueById('your_subnvue_id')
if(subNVue) {
subNVue.hide()
// 或者完全销毁
// subNVue.destroy()
}
}
-
使用页面栈管理: 检查当前页面栈,确保在打开新页面时,之前的页面实例被正确清理。
-
subnvue实例复用: 在页面onShow时显示需要的subnvue,onHide时隐藏,避免重复创建。
-
登录页relaunch处理: 在relaunch到登录页前,确保所有subnvue实例都已正确销毁:
// 退出登录时清理所有subnvue
const subNVues = uni.getSubNVuesById?.(['id1', 'id2']) // 获取所有subnvue实例
subNVues?.forEach(sub => sub.destroy?.())
uni.reLaunch({url: '/pages/login/login'})

