uni-app 路由无前进功能
uni-app 路由无前进功能
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | 10 | HBuilderX |
bug描述:
有页面A,页面A使用navigateTo 跳至页面B,B有个文本框和一个返回,在文本框中输入值 后返回,再使用navigateTo 进入B,文本框内容没有了。
A页面:
uni.navigateTo({url"B"});
B页面:
uni.navigateBack()
A页面再次:
uni.navigateTo({url"B"});
这时B页面是一个新页面,不是之前编辑过的页面。
示例代码:
A页面:
uni.navigateTo({url"B"});
B页面:
uni.navigateBack()
A页面再次:
uni.navigateTo({url"B"});
更多关于uni-app 路由无前进功能的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 路由无前进功能的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是 uni-app 路由机制的正常表现,不是 bug。
原因分析:
-
uni.navigateTo 每次都会创建新页面实例
- 每次调用
uni.navigateTo({url: 'B'})都会创建一个全新的 B 页面实例 - 页面 B 被创建时,其 data 数据会重新初始化
- 文本框内容属于页面实例的临时状态,新实例自然没有之前输入的内容
- 每次调用
-
页面栈管理机制
- 第一次 A → B:页面栈为 [A, B]
- B 返回时:页面栈恢复为 [A],B 页面实例被销毁
- 第二次 A → B:重新创建 B 实例,页面栈再次变为 [A, B]
解决方案:
-
使用全局状态管理
// 在 B 页面输入时保存数据 onUnload() { uni.setStorageSync('B_input_value', this.inputValue) } onLoad() { // 加载时恢复数据 this.inputValue = uni.getStorageSync('B_input_value') || '' } -
使用 Vuex/pinia 状态管理
- 将页面状态存储在全局 store 中
- 页面销毁时状态不会丢失
-
使用页面通信(适合简单场景)
// A 页面跳转时传递参数 uni.navigateTo({ url: 'B?inputValue=' + encodeURIComponent(this.lastInputValue) })

