最近在做小程序的時候遇到這么一個有趣的問題,就是從A頁面跳轉(zhuǎn)到B頁面,如果B頁面需要在接口加載之后更改title,
并且如果接口請求過慢,還滅有請求完畢時就點擊返回按鈕回到A頁面,這時B頁面的請求會繼續(xù)執(zhí)行,并在執(zhí)行完畢后修改了A頁面的title。
原因
個人猜想,小程序本身屬于單頁面應(yīng)用,代碼的運行權(quán)限沒有處理好,就像上面這種情況,B頁面的代碼穿越到了A頁面的環(huán)境里面,并且執(zhí)行。
解決
- 既然B頁面的請求方法可以在A頁面執(zhí)行,那么在B頁面的方法中獲取的當前的頁面路由時就有可能可以獲取到A頁面的路由,經(jīng)過測試果然不出所料。
- 所以,可以這樣來解決這個問題:在B頁面的onLoad中獲取當前頁面路徑,應(yīng)該是
/b,然后在方法中再次獲取當前路徑,可能是/b,也可能是/a,
若是/a,則是上面提到問題情況,這個時候就不用取改變title了,若是/b,則可以更改。
代碼
// utils.js
const getCurrentRouter = function () {
let arr = getCurrentPages(),
len = arr.length;
return arr[len - 1].route;
}
export {getCurrentRouter};
// b.js
import {getCurrentRouter};
import { getDataForB } from '../../../servies/services.js';
Page({
onLoad (options) {
this.currentRouter = getCurrentRouter();
},
// 獲取數(shù)據(jù)
getData () {
getDataForB().then(() => {
// 獲取數(shù)據(jù)后判斷router是否一致
if (this.currentRouter == getCurrentRouter()) {
wx.setNavigationBarTitle({
title: '要修改的title'
})
}
})
}
})
個人博客:午后南雜