在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ vue跳轉(zhuǎn)路由前清空之前所有請(qǐng)求?

vue跳轉(zhuǎn)路由前清空之前所有請(qǐng)求?

如題,項(xiàng)目是vue-cli單頁(yè)面應(yīng)用,所以即使在跳轉(zhuǎn)路由,上一個(gè)頁(yè)面的請(qǐng)求也不會(huì)停止,這樣會(huì)產(chǎn)生一系列問(wèn)題。。。
在axios的官方文檔發(fā)現(xiàn)了取消請(qǐng)求的方法,于是我就動(dòng)手在我封裝的axios里面試了試,沒(méi)有成功,求指教

如圖:我在base.js里創(chuàng)建了axios的實(shí)例,并且配置了canceltoken

clipboard.png

問(wèn):我現(xiàn)在想要在每次跳轉(zhuǎn)路由前調(diào)用cancel方法應(yīng)該怎么弄(我的beforeEach在main.js中)

回答
編輯回答
編輯回答
嘟尛嘴

beforeRouteLeave
將所有的當(dāng)前請(qǐng)求組織一個(gè)list放在this里,然后在離開(kāi)路由的時(shí)候cancel即可

2018年4月18日 18:59
編輯回答
清夢(mèng)

在每個(gè)組件的beforeDestoy生命周期中執(zhí)行噶

2017年11月6日 20:27
編輯回答
陌上花

模式錯(cuò)了,不應(yīng)該這樣的。你可以寫(xiě)一個(gè)mixin

beforeDestory() {
  this.cancel() // 在組件內(nèi)
}
2017年10月10日 06:50
編輯回答
遺莣

要取消請(qǐng)求的話,肯定要記錄你當(dāng)前的所有請(qǐng)求

// 添加請(qǐng)求攔截器
axios.interceptors.request.use(
    config => {
        // 記錄該條請(qǐng)求,我用的是url,你可以用其他
        const url = config.url;
        // 把cancel放在axios.list[url]下面
        config.cancelToken = new axios.CancelToken(cancel => axios.list[url] = { cancel });
        return config;
    },
    error => Promise.reject(error)
);
//然后可以在其他地方,遍歷axios.list,調(diào)用list里面的cancel就可以取消當(dāng)前所有請(qǐng)求
for(let key in axios.list){
    axios.list[key].cancel();
    //順手刪除
    delete axios.list[key];
}
2017年11月19日 15:13
編輯回答
離觴

難點(diǎn)就是怎么在組件里拿到cancel,
那就利用函數(shù)的形參是對(duì)象的話,函數(shù)內(nèi)部改變對(duì)象屬性會(huì)影響到實(shí)參,
這樣的話 在base里面改變對(duì)象之后,組件調(diào)用api時(shí)傳過(guò)去的對(duì)象也會(huì)被改變,

我有做過(guò)類似的,但是我看你封裝的axios跟我的不大一樣,而且也看不出你是怎么使用instance的,我就把我的思路告訴你把

頁(yè)面組件調(diào)用的地方:

this.$api.getInfo(params, this.cancel)    //    cancel = {}

接口:

getInfo(params, cancel) {
    return base(params, cancel)    
}

base:
拿到cancel這個(gè)對(duì)象,然后給這個(gè)空對(duì)象添加一個(gè)屬性cancel,值是可終止請(qǐng)求的函數(shù)體
省略了很多,只有個(gè)大致思路

export const base = (params, cancel,.....) => {
    let config = {....}
    config.cancelToken = new CancelToken(function executor(c) {
      cancel.cancel = c;
    })
    
    return axios(config)
}
2018年8月14日 14:44