问题描述
项目是做一个支付小程序,流程上要求用户支付成功一笔后,如果想继续支付第二笔,必须重新回到小程序主页。因为中间穿插多个功能和支付信息展示,从支付开始到完成一共有4个页面。
因为上述流程限制我从网上查阅资料,发现返回上一级按钮与路由方式有关。
wx.navigateTo
保留当前页面并跳转,所以会出现返回按钮。
wx.redirectTo
和wx.reLaunch
都是关闭页面后跳转,区别是一个只关闭当前页面,一个关闭所有页面。
所有论坛和文章都是说使用wx.redirectTo
路由后不会出现返回按钮。
但是事实并非如此,在项目里我也是使用的wx.redirectTo
方法跳转到结算详情页面的,但如上图所示,依然出现了返回按钮。
这里直接说解决方法:需要用wx.reLaunch
进行路由
原因分析:
“小程序页面栈”概念的引入
在微信小程序中,页面栈(Page Stack)指的是一个用来管理页面导航的栈结构。每当你在小程序中进行页面跳转,当前页面会被压入栈中,而新页面会显示在顶部。用户可以通过“返回”操作将之前的页面从栈中弹出。
主要概念:
页面栈的基本操作:
- 页面入栈:每次调用
wx.navigateTo
方法时,当前页面会被推入栈中,新页面会显示在顶部。 - 页面出栈:调用
wx.navigateBack
方法时,当前页面会被从栈中移除,之前的页面会恢复显示。
栈的限制:
*微信小程序的页面栈最大深度是 10 层。如果页面栈深度达到上限,无法再继续压入新页面,需要先返回某些页面才能继续导航。
页面栈的操作API:
wx.navigateTo(Object)
:打开新页面并将当前页面推入栈中。wx.redirectTo(Object)
:关闭当前页面并打开新页面,不会保留当前页面在栈中。wx.reLaunch(Object)
:关闭所有页面并打开新页面。wx.navigateBack(Object)
:关闭当前页面,返回上一个页面,可以设置 delta 属性返回多级页面.
也就是说,是否存在返回按钮和路由方法无直接关系,与页面栈内是否有页面有关系。当页面栈内有页面时(例如在当前页面之前使用了wx.navigateTo
),跳转后一定会出现返回按钮。反之则不会出现返回按钮。
我的项目就是在Page2跳转Page3的时候使用了wx.navigateTo
方法,而Page3跳转Page4(需要禁止用户返回的页面)的时候仅使用wx.redirectTo
而未使用wx.reLaunch
导致显示Page4时仍有页面未关闭,才会出现返回按钮。
解决方案:
- 如果项目流程情况与我的一致,只需要在某个页面限制用户的返回,前面的页面没有限制。就只需要在跳转需要限制返回的页面时使用
wx.reLaunch
路由方法即可。 - 如果在流程的每个页面都禁止用户返回,就需要在跳转时都使用
wx.redirectTo
或wx.reLaunch
,而不能使用wx.navigateTo
路由方法。