問題
微信小程序onLoad(options)方法在整個(ge)生命(ming)周期中只加載一次,也就是(shi)你進入下個(ge)頁面(mian),再返(fan)回(hui)時(shi),是(shi)不會再次觸發的,所以(yi)你返(fan)回(hui)是(shi)url傳參是(shi)行不通了。
需求
現在(zai)有這么(me)一(yi)個需求:一(yi)個商(shang)品(pin)支付頁面,點(dian)擊優(you)惠(hui)(hui)卷進入(ru)優(you)惠(hui)(hui)券(quan)列(lie)表頁,選中優(you)惠(hui)(hui)券(quan)后帶著數(shu)據再返(fan)回(hui)到支付頁面。
方法
一、使(shi)用到的方(fang)法(fa)是(shi)(shi)小(xiao)程序的頁(ye)面(mian)(mian)棧,感興趣可(ke)以打(da)印一下pages的內容,就(jiu)是(shi)(shi)你頁(ye)面(mian)(mian)跳轉的軌跡數組,最后(hou)一項就(jiu)是(shi)(shi)當(dang)前(qian)頁(ye)面(mian)(mian),倒數第二個就(jiu)是(shi)(shi)上一頁(ye)。很好理解,因為在當(dang)前(qian)頁(ye)停(ting)止(zhi)了,肯(ken)定是(shi)(shi)最后(hou)一個
//獲取頁面棧
let pages = getCurrentPages();
//獲取所需頁面
let currPage = pages[pages.length - 1];//當前頁面
let prevPage = pages[pages.length -2];//上一頁
二、在支(zhi)付頁把(ba)需要再(zai)次(ci)刷(shua)新的數據都放到onShow()方法(fa)中,不需要刷(shua)新的放到onLoad()方法(fa)中
思路
1、我(wo)們的(de)目標是(shi)把優(you)惠(hui)券的(de)數據渲(xuan)染到(dao)支付頁上,所以先(xian)在優(you)惠(hui)券頁面(mian)(mian)點擊優(you)惠(hui)券的(de)時候通過頁面(mian)(mian)棧獲取到(dao)上一頁(也就是(shi)支付頁),將本條數據動(dong)態添加(jia)到(dao)支付頁的(de)data中(zhong)
//獲取頁面棧
let pages = getCurrentPages();
//獲取所(suo)需頁面
let prevPage = pages[pages.length -2];//上一頁
prevPage.setData({
yourData:yourData,//你需(xu)要(yao)傳(chuan)過去(qu)的數據
});
2、將需要(yao)刷新(xin)的數據放(fang)到onShow()方法中
//這(zhe)里(li)展示在onShow方法中獲取當前(qian)頁onLoad方法中的options
onShow:function(){
let pages = getCurrentPages();
let currPage = pages[pages.length - 1];
//當前頁(ye)的(de)options,啥意思呢(ni),就是你可能(neng)某個函數需要刷新,但是他的(de)參數正好是傳過來的(de)參數
console.log(currPage.options);
}
你(ni)在(zai)優惠券頁(ye)(ye)點(dian)擊之后,因(yin)為(wei)你(ni)的數(shu)據已經存到(dao)支(zhi)付頁(ye)(ye)了,所以返回支(zhi)付頁(ye)(ye)后,你(ni)可(ke)以直接在(zai)data中獲(huo)取到(dao)你(ni)需(xu)要的數(shu)據,進行你(ni)需(xu)要的操作。