getCurrentPages() 的应用

2,040 阅读2分钟

getCurrentPages() 是一个非常常用的微信小程序 API,用于获取当前页面栈的信息。在小程序中,页面栈是由所有已经打开的页面组成的一个数组,栈顶的页面即为当前页面,该页面可以通过此方法获取自身及所在的页面栈的信息。

当前页面栈可以表示为一个栈结构,栈的顶部即为当前页面,栈底即为小程序的初始页面。在小程序中,可通过 wx.navigateTo()、wx.redirectTo() 和 wx.reLaunch() 等API进行页面的跳转,将新的页面压入当前页面栈中。而通过 wx.navigateBack() 可以返回到上一个页面,同时弹出当前页面,页面栈将发生变化。

getCurrentPages() 方法返回一个页面数组,这个数组包含了当前页面栈中的所有页面对象,栈顶页面也包含在内。这个数组中的最后一个元素即为当前页面,使用

getCurrentPages()[getCurrentPages().length - 1]

可以获取到当前页面的对象。

我们可以使用 getCurrentPages() 获取当前页面栈的信息,以及进行页面栈的遍历和操作。

具体操作:

  1. 获取当前页面路径和参数
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
console.log('当前页面路径:', currentPage.route)
console.log('当前页面参数:', currentPage.options)
  1. 遍历页面栈信息
const pages = getCurrentPages()
for (let i = 0; i < pages.length; i++) {
  console.log('第' + i + '个页面:', pages[i].route)
}
  1. 替换页面栈中的某个页面
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,

        })

      }