在app.js中添加如下兩個方法即可:
// 設置需要回調的地址 setCallbackUrl: function(mode) { return new Promise((resolve,reject) => { let pages = getCurrentPages(); //獲取加載的頁面 let currentPage = pages[pages.length - 1]; //獲取當前頁面的對象 let urlPage = ''; // 存儲的跳轉地址 let url = currentPage.route; //當前頁面url let argumentsStr = ''; let options = currentPage.options; //如果要獲取url中所帶的參數可以查看options for (let key in options) { let value = options[key]; argumentsStr += key + '=' + value + '&'; } if(argumentsStr) { argumentsStr = argumentsStr.substring(0, argumentsStr.length - 1); urlPage = url + '?' + argumentsStr; } else { urlPage = url; } let callbackObj = { callbackUrl: `/${urlPage}`, mode: mode || 'redirectTo' } wx.setStorageSync('callbackObj', JSON.stringify(callbackObj)); resolve(); }) }, // 獲取本地可以回調的地址 getCallBackUrl: function() { return new Promise((resolve,reject) => { const callbackObj = wx.getStorageSync('callbackObj'); if(callbackObj) { let resultObj = JSON.parse(callbackObj); let callbackUrl = resultObj.callbackUrl; let mode = resultObj.mode; mode == 'redirectTo' && wx.redirectTo({url: callbackUrl}); mode == 'switchTab' && wx.switchTab({url: callbackUrl}); mode == 'reLaunch' && wx.reLaunch({url: callbackUrl}); mode == 'navigateTo' && wx.navigateTo({url: callbackUrl}); } else { reject(); } }) },
跳轉到登錄頁面前通過setCallbackUrl方法獲取即將跳轉的當前頁面,當登錄后調用getCallBackUrl方法,查看本地是否有需要跳轉的地址,沒有就在catch中執行登錄后的正常邏輯,比如跳轉到我的模塊頁面。代碼如下:
app.getCallBackUrl().catch(() => { // catch中執行默認的操作 wx.redirectTo({ url: '/pages/my/mycenter/mycenter' }) })