vue路由跳转取消上个页面的请求

第一步:

  axios请求头设置  

import axios from 'axios'
import { store } from './store'    // 引入vuex

axios.interceptors.request.use(
  config => {
    config.cancelToken = new axios.CancelToken(function (cancel) {
      store.commit('pushToken', {cancelToken: cancel})
    })
    return config
  }
)

  第二步:

  利用vuex,新建一个store.js,将取消方法cancel放到数组中,然后在路由守卫中把数组中存有的cancel方法都执行

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export const store = new Vuex.Store({
  state: {
    cancelTokenArr: [] // 取消请求token数组
  },
  mutations: {
    pushToken (state, payload) {
      state.cancelTokenArr.push(payload.cancelToken)
    },
    clearToken (state) {
      state.cancelTokenArr.forEach(item => {
        item('路由跳转取消请求')
      })
      state.cancelTokenArr = []
    }
  }
})

  第三步:

  监听路由  

router.beforeEach(function (to, from, next) {
  store.commit('clearToken') // 取消请求
  next()
})

https://my.oschina.net/u/4309525/blog/3281330
http://www.axios-js.com/zh-cn/docs/#取消

posted @ 2020-08-13 17:12  樱风凛  阅读(1528)  评论(0编辑  收藏  举报