摘要:問題背景分享的數(shù)據(jù)來源當前在維護的小程序項目使用開發(fā)分享的數(shù)據(jù)都是通過接口請求后臺的形式獲得然后存在了數(shù)據(jù)的對象中類似定義分享數(shù)據(jù)分享數(shù)據(jù)獲取分享數(shù)據(jù)賦值后臺返回的分享數(shù)據(jù)當前商品的唯一值使用分享數(shù)據(jù)來自頁面內(nèi)轉(zhuǎn)發(fā)按鈕問題的發(fā)生在大部分
問題背景 -- 分享的數(shù)據(jù)來源
當前在維護的小程序項目使用wepy開發(fā);分享的數(shù)據(jù)都是通過接口請求后臺的形式獲得;然后存在了數(shù)據(jù)data的對象中;類似
定義分享數(shù)據(jù) data = { shareData: "", // 分享數(shù)據(jù) } 獲取分享數(shù)據(jù) tip.getShareDataReci(res => { that.shareData = res; // 賦值后臺返回的分享數(shù)據(jù) that.$apply(); }, curCode); // curCode當前商品的唯一code值 使用分享數(shù)據(jù) onShareAppMessage(res) { let that = this; if (res.from === "button") { // 來自頁面內(nèi)轉(zhuǎn)發(fā)按鈕 } return { title: that.shareData.title, imageUrl: that.shareData.img, path: that.shareData.path, success: function(res) { ... } }問題的發(fā)生
在大部分的電商網(wǎng)站都有類似的情況;在一個商品List中點擊進入某一個商品詳情A;然后在詳情A的頁面中又會有推薦的商品;這個時間點擊進入商品詳情B;點擊分享(不區(qū)分右上角...分享和自己添加的分享按鈕);分享的數(shù)據(jù)是自己存data里面的數(shù)據(jù);也都是對的;關(guān)鍵的操作來了;這個時候返回商品A(不區(qū)分右滑返回和左上角返回鍵和物理返回鍵);點擊分享;會發(fā)現(xiàn)分享的數(shù)據(jù)仍然是商品B的信息~
問題的解決 1. 出棧的解決方式在商品詳情A的推薦位置;點擊的時候使用redirect出棧的方式去打開詳情B;這個時候分享B是正確的;然后返回是不會到A的;因為被卸載了;直接從B回到了List;不會存在回到A之后分享數(shù)據(jù)不正確的問題~~
但是這樣的解決方案帶來的體驗是不好的
第一步在商品List跳轉(zhuǎn)到商品詳情A的時候;在A的onluad周期中(返回不會觸發(fā)該周期)進行存儲唯一code值的動作
let reciCodeList = wepy.getStorageSync("reciCodeList"); // 定義獲取的code集合 if (!reciCodeList.length) { // 如果之前沒有code則往新的數(shù)組中添加該code wepy.setStorageSync("reciCodeList", [].concat(options.dishCode)); } else { // 如果之前有code(可能在詳情A的推薦位置又進入了詳情B;類推) // 會進行一個去重的動作;防止出現(xiàn)兩個一樣的 let i = utils.inArray(options.dishCode, reciCodeList); if (i >= 0) { shareData.splice(i, 1); } // 將可能進行去重處理過的數(shù)據(jù)存緩存 wepy.setStorageSync("reciCodeList",reciCodeList.concat(options.dishCode)); }2.2 改 -- 修改code集合
第二步在商品詳情A的onUnload周期中(頁面返回動作會觸發(fā)該生命周期;頁面出棧也會觸發(fā)到)進行修改reciCodeList動作;此動作是為了能在返回之后拿到正確的code值
onUnload() { // 先獲取存儲的code集合 let reciCodeList = wepy.getStorageSync("reciCodeList"); // 刪除數(shù)組的最后一項(為了能在返回之后的頁面拿最后一項即為當前正確項) /* 我是一個栗子 在經(jīng)過onluad以后會得到 在A的時候;存下了A的唯一code值;為reciCodeList = ["A"]; 在B的時候;累計存下了B的唯一code值;為reciCodeList = ["A","B"]; 在C的時候;累計存下了B的唯一code值;為reciCodeList = ["A","B","C"]; ... 當觸發(fā)返回的時候;會觸發(fā)onUnload函數(shù);這個時候去刪除最后一下;會得到 在C的時候;存儲的reciCodeList = ["A","B","C"]; 這個時候去返回;并且刪除最后一項;得到了 reciCodeList = ["A","B"]; 并且頁面回到了B的頁面 */ reciCodeList.pop(); // 存儲新的集合 wepy.setStorageSync("reciCodeList", reciCodeList); }2.3 取 -- 取到正確的code
第三步在商品詳情A的onShow周期中(每次頁面被顯示都會觸發(fā);返回也是被顯示了)進行獲取分享數(shù)據(jù)的動作
async onShow() { let that = this; // 先獲取存儲的code集合 let reciCodeList = wepy.getStorageSync("reciCodeList"); if (reciCodeList.length) { // 如果存在code值;則拿最后一個code值為當前code值 let curCode = reciCodeList[reciCodeList.length - 1]; // 當前值去發(fā)送請求;獲得正確的分享數(shù)據(jù) tip.getShareDataReci(res => { that.shareData = res; that.$apply(); }, curCode); } }問題的延伸
可能會出現(xiàn)類似的問題;例如當前詳情的分享+收藏+不同用戶展示不用信息(下有栗子);都存在返回后數(shù)據(jù)不正確的情況;也可以一并使用這個方案處理
// 我是不同用戶展示不用信息的栗子 // 依然使用前文的 A B C (詳情頁都有登錄的入口) A頁面是未登錄狀態(tài);顯示未登錄狀態(tài)該有的展示信息;不在A頁面登錄;點擊推薦位置到B頁面 B頁面起初顯示的也是未登錄狀態(tài)下的展示信息;這個時候在B頁面進行了登錄;回到A還是未登錄的狀態(tài) 這個時候只需要在A的onShow取一次緩存的用戶信息即可 that.userInfo = wepy.getStorageSync("userInfo");
這個是目前微信存在的bug;可先通過方法規(guī)避開;等微信修復了以后就樂呵呵了~~~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/52013.html
摘要:問題背景分享的數(shù)據(jù)來源當前在維護的小程序項目使用開發(fā)分享的數(shù)據(jù)都是通過接口請求后臺的形式獲得然后存在了數(shù)據(jù)的對象中類似定義分享數(shù)據(jù)分享數(shù)據(jù)獲取分享數(shù)據(jù)賦值后臺返回的分享數(shù)據(jù)當前商品的唯一值使用分享數(shù)據(jù)來自頁面內(nèi)轉(zhuǎn)發(fā)按鈕問題的發(fā)生在大部分 問題背景 -- 分享的數(shù)據(jù)來源 當前在維護的小程序項目使用wepy開發(fā);分享的數(shù)據(jù)都是通過接口請求后臺的形式獲得;然后存在了數(shù)據(jù)data的對象中;類似...
摘要:在小程序啟動的時候自動登錄,目前沒獲取用戶信息,所以不需要用戶授權(quán),這個邏輯放在根目錄下的的方法中。做完之后發(fā)現(xiàn)了一個很嚴重的問題,就是的方法確實會在小程序啟動的時候執(zhí)行,但是首頁也會是在文件的中第一個頁面也會同時執(zhí)行,它不是阻塞的。 啟動頁在APP中是個很常見的需求,為什么對于小程序來說也非常重要呢?首先我描述一下我在開發(fā)過程中遇到的一些問題以及解決的步驟,到最后為什么要加啟動頁,看...
摘要:具體用法其中表示數(shù)組元素的值,表示數(shù)組元素的下標,表示包含該元素的數(shù)組。這里采用隨機函數(shù)來獲取數(shù)組的下標,函數(shù)是獲取之間的數(shù),函數(shù)是向下取整,這樣就可以隨機獲取相應的下標數(shù)。小程序中的模板就很好地幫我們解決了這個問題,并通過屬性來實現(xiàn)調(diào)用。 在微信小程序的開發(fā)過程中,當你想要實現(xiàn)不同頁面間的數(shù)據(jù)綁定,卻為此抓耳饒腮時,不妨讓微信小程序與filter 來一場完美的邂逅,相信會給你帶來別樣...
摘要:微信小程序課程,面向所有具備前端基礎(chǔ)知識的同學官網(wǎng)訪問官網(wǎng)更快閱讀全部免費分享課程出品全網(wǎng)最新微信小程序基于最新版開發(fā)者工具之初中級培訓教程分享。 ?? 微信小程序課程,面向所有具備前端基礎(chǔ)知識的同學 ?? iKcamp官網(wǎng):http://www.ikcamp.com 訪問官網(wǎng)更快閱讀全部免費分享課程:《iKcamp出品|全網(wǎng)最新|微信小程序|基于最新版1.0開發(fā)者工具之初中級培訓教...
摘要:微信小程序課程,面向所有具備前端基礎(chǔ)知識的同學官網(wǎng)訪問官網(wǎng)更快閱讀全部免費分享課程出品全網(wǎng)最新微信小程序基于最新版開發(fā)者工具之初中級培訓教程分享。 ?? 微信小程序課程,面向所有具備前端基礎(chǔ)知識的同學 ?? iKcamp官網(wǎng):http://www.ikcamp.com 訪問官網(wǎng)更快閱讀全部免費分享課程:《iKcamp出品|全網(wǎng)最新|微信小程序|基于最新版1.0開發(fā)者工具之初中級培訓教...
閱讀 2757·2021-10-26 09:50
閱讀 2402·2021-10-11 11:08
閱讀 2139·2019-08-30 15:53
閱讀 1915·2019-08-30 15:44
閱讀 2391·2019-08-28 18:12
閱讀 2532·2019-08-26 13:59
閱讀 2862·2019-08-26 12:19
閱讀 2762·2019-08-26 12:09