用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頁面傳過來的值