Taro 页面返回携带参数

用taro做小程序的项目中,也是经常用到从A页面跳到B页面,再从B页面返回A页面携带参数的业务逻辑,

就有很多种方法,本地存储就是一种解决方案,

小程序官方有自带的一种返回携带参数,但是这种方法在taro中并不能使用

我们在B页面要返回之前要拿到上个页面的信息

  let pages = Taro.getCurrentPages(); // 获取当前的页面栈 
  let prevPage = pages[pages.length - (num+1)]; //  获取上一页面

  然后从 prevPage 中设置setData 一个数据 最好是传入一个对象,拿值的时候就方便的多

  prevPage.setData({num:1})

  然后再返回

    Taro.navigateBack({
      delta:num
    });

  接着返回到A页面之后,我们要在 componentDidShow()中拿到数据

 let pages = Taro.getCurrentPages();
 let currPage = pages[pages.length - 1]; // 获取当前页面
console.log(currPage.data.num) //就是从B页面传过来的值

  完整代码如下:

/** 
 * 返回时携带参数
 * 传参的页面:backWithParam(num,params)
 * 接受的页面在 componentDidShow() 方法中接收,setState后需要手动刷新key
 * let pages = Taro.getCurrentPages();
 * let currPage = pages[pages.length - 1]; // 获取当前页面
 * this.setState({ 
 *   house_id: currPage.data.house_id, 
 * })
 */
export const backWithParam = function (num=1,data) { 
  let pages = Taro.getCurrentPages(); // 获取当前的页面栈 
  let prevPage = pages[pages.length - (num+1)]; //  获取上一页面
  prevPage.setData(data)
    Taro.navigateBack({
      delta:num
    });
}

  写到工具类中,然后在B页面引入执行后返回A页面

 

 

 在A页面中写入

componentDidShow() {
    let pages = Taro.getCurrentPages();
    let currPage = pages[pages.length - 1]; // 获取当前页面
console.log(currPage.data.fillInfo)
if (currPage.data.fillInfo == '1'){
xxxxxxx //代码逻辑 }
}

  最后打印的值就是从B页面传过来的值

posted @ 2021-03-02 16:49  微笑时很美n  阅读(2352)  评论(0编辑  收藏  举报