鸿蒙Next中router.replaceUrl()会记录页面,应用重启后显示首页如何解决
在鸿蒙Next中使用router.replaceUrl()跳转页面时,发现跳转后的页面会被记录到路由栈中。当应用重启后,系统总是显示首页而不是最后跳转的页面。请问如何解决这个问题,让应用重启后能正确显示最后一次replaceUrl跳转的页面?
2 回复
哈哈,鸿蒙Next里router.replaceUrl()不记仇,重启就失忆!想让应用记住页面?试试用持久化存储(比如Preferences)记录当前页面路径,启动时读取并跳转。简单说就是:存个“小纸条”,开机看一眼!
更多关于鸿蒙Next中router.replaceUrl()会记录页面,应用重启后显示首页如何解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next中,router.replaceUrl() 会替换当前页面栈中的页面,但应用重启后默认会显示首页。这是因为系统在应用重启时会重新初始化页面栈,通常从首页开始加载。
解决方法:
-
使用
router.replaceUrl()时配合页面持久化存储:- 在跳转前,将目标页面的路径保存到应用持久化存储(如
Preferences或数据库)。 - 应用重启时,在
onCreate或首页的onPageShow中检查存储的路由路径,并自动跳转。
- 在跳转前,将目标页面的路径保存到应用持久化存储(如
-
具体步骤:
- 保存路由路径:
import preferences from '@ohos.data.preferences'; // 保存目标页面路径 async function saveRoutePath(path: string) { let prefs = await preferences.getPreferences(this.context, 'myAppStore'); await prefs.put('savedRoute', path); await prefs.flush(); } // 在调用 replaceUrl 前保存路径 await saveRoutePath('pages/TargetPage'); router.replaceUrl({ url: 'pages/TargetPage' }); - 应用启动时恢复页面:
// 在 Ability 的 onWindowStageCreate 或首页 onPageShow 中检查 async function restoreRoute() { let prefs = await preferences.getPreferences(this.context, 'myAppStore'); let savedPath = await prefs.get('savedRoute', 'pages/Index'); // 默认首页 if (savedPath !== 'pages/Index') { router.replaceUrl({ url: savedPath }); } }
- 保存路由路径:
-
注意事项:
- 确保在合适的生命周期(如应用启动或首页显示时)调用恢复逻辑。
- 若需处理页面参数,可一并保存和恢复。
通过此方法,应用重启后将自动跳转到最后通过 replaceUrl 设置的页面,而非始终显示首页。

