Taro/小程序中的页面传参

方法一:使用小程序跳转功能提供的传参方式(navigateTo, navigateBack)。
方法二:使用vuex方法。
方法三:使用第三方封装好的Router组件(vue-taro-router)。

本篇主要记录下前两种方法。


∵ 第二种方法有局限性,比如在多级页面需要控制数据何时传输的情况,如下两种情况的A/B/C页面:

选择教师负责班级C -> 编辑教师信息B -> 教师信息A
C通知B所选择的班级,通过修改store数据的话会导致直接修改到A的数据,C页/B页的保存按钮就没意义了。

幼儿某项活动记录C -> 幼儿更多活动记录B -> 幼儿活动记录A
如果C中某项记录删除/修改了,更新B页,同时也要更新到A页,修改store是最方便的。


∴ 存在需要控制数据和不需要控制数据的情况,两种方法结合使用可能比较好。

另外,react版都有类似的方法([redux](https://redux.js.org/introduction/getting-started),[tarojs-router-next](https://taro-ext.jd.com/plugin/view/5f64832f0dd8313026e0942b))

当前页往目标页传参

Taro.navigateTo({
    url: `../questions/index?id=${id}`, // 由于没类似params/query,手动拼接
})

当前页往历史页传参

使用Taro.getCurrentPages()可以获得页面栈,栈顶pages[pages.length - 1]就是当前页。

获取到页面实例就可以在上一页用setData申明好数据/方法,在当前页需要时调用更新上一页数据。

// 一般用的就是当前页和上一页之间传参,工具类里面封装好两个方法。
export function getCurrentPage() { // 当前页
  const pages = Taro.getCurrentPages();
  return pages[pages.length - 1];
}

export function getPrevPage() { // 上一页
  const pages = Taro.getCurrentPages();
  if (pages.length > 1) {
    return pages[pages.length - 2];
  }
  return undefined;
}

历史页面

let currentPage = getCurrentPage() // 获取当前页实例
currentPage.setData({ // 提供公共方法/数据
    setClassList: (list) => {
        this.classList = list // 传进list保存到当前页classList中
    }
})

当前页

let list = []
let prevPage = getPrevPage() // 获取上一页实例
prevPage.data?.setClassList(list)  // 调用公共方法/数据
Taro.navigateBack() // 返回上一页