getCurrentPages() 是一个非常常用的微信小程序 API,用于获取当前页面栈的信息。在小程序中,页面栈是由所有已经打开的页面组成的一个数组,栈顶的页面即为当前页面,该页面可以通过此方法获取自身及所在的页面栈的信息。
当前页面栈可以表示为一个栈结构,栈的顶部即为当前页面,栈底即为小程序的初始页面。在小程序中,可通过 wx.navigateTo()、wx.redirectTo() 和 wx.reLaunch() 等API进行页面的跳转,将新的页面压入当前页面栈中。而通过 wx.navigateBack() 可以返回到上一个页面,同时弹出当前页面,页面栈将发生变化。
getCurrentPages() 方法返回一个页面数组,这个数组包含了当前页面栈中的所有页面对象,栈顶页面也包含在内。这个数组中的最后一个元素即为当前页面,使用
getCurrentPages()[getCurrentPages().length - 1]
可以获取到当前页面的对象。
我们可以使用 getCurrentPages() 获取当前页面栈的信息,以及进行页面栈的遍历和操作。
具体操作:
- 获取当前页面路径和参数
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
console.log('当前页面路径:', currentPage.route)
console.log('当前页面参数:', currentPage.options)
- 遍历页面栈信息
const pages = getCurrentPages()
for (let i = 0; i < pages.length; i++) {
console.log('第' + i + '个页面:', pages[i].route)
}
- 替换页面栈中的某个页面
const pages = getCurrentPages()
const index = pages.length - 2 // 倒数第二个页面
const newPage = { route: 'pages/newPage/newPage' } // 新页面对象
pages[index] = newPage // 替换为新页面
需要注意的是,getCurrentPages() 只能获取小程序页面栈中的页面信息,而无法获取 tabBar 页面的信息。如果需要获取 tabBar 页面的信息,可以使用 wx.switchTab() 方法进行跳转,再使用相应页面的生命周期函数获取信息。
另外,小程序中页面栈是有容量限制的,超出限制会导致页面无法正常打开。具体限制取决于设备,一般情况下最多可同时打开 5 - 10 个页面。因此,在编写小程序时,需要合理利用这些页面资源,不要滥用页面跳转功能,尽可能地优化用户体验。
实际应用场景:
getCurrentPages() 返回的是一个数组,数组中包含了当前页面栈中的所有页面对象(即路过的网页,一般第一个是首页,最后一个是最近访问的)。该方法常用于获取当前页面的一些信息,以及进行页面栈的遍历和操作。
const pages = getCurrentPages()
console.log('页面栈', pages)
// 得到数组最后一个值,最后一个是最近访问的
const lastPage = pages[pages.length - 1]
// 没有 token ,跳回 login
// route: "pages/profile/index" 存的是网页地址
if(!token){
wx.redirectTo({
url: 'pages/login/index?redirectURL=/' + lastPage.route,
})
}