Skip to content

小程序页面怎么跳转? ​

页签用 switchTab,普通页面进栈用 navigateTo,替换当前页用 redirectTo,关掉所有页面打开某个页用 reLaunch。返回用 navigateBack。栈有深度上限,不能无限 navigateTo。

原理 ​

navigateTo 保留当前页,所以返回时状态还在,但页面只是隐藏,onHide 会触发,不是 onUnload。redirectTo 会卸载当前页,不能再返回它。switchTab 只能跳到 tabBar 里配置的页面,而且会关掉非页签的页面栈。

参数放在 URL 查询串里,在目标页的 onLoad 读取。参数有长度限制,不要塞整个对象。需要传大对象时,放进上一个页面都能访问的状态里,并约定返回时怎么清理。

自定义导航栏不会改变这套栈,只改变画出来的栏。返回按钮如果自己画,仍然调用 navigateBack。

追问 ​

和网页路由的差别?

网页的 history 模式由前端路由库模拟。小程序的栈是运行环境管的,API 是上面这几个,不能用 history.pushState。刷新这个概念也不一样,页面被销毁后状态就没了。

登录后再回到原页面?

跳登录前记下当前路径。登录成功用 redirectTo 或 navigateBack 回去。用 navigateTo 会把登录页留在栈里,返回又回到登录。

易错点 ​

  • 对 tabBar 页面使用 navigateTo,调用失败。
  • 栈超过限制仍继续进入下一页,没有改成 redirectTo。
  • 在 onUnload 里假设还能 setData。页面已经在卸载。

相关 ​