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

为什么会使用

  1. 当一个页面的请求过长时,然后点击链接跳转到新的页面,会导致不必要的资源浪费,如果上一个接口出现报错情况,会误导用户导致体验感不好。

怎么使用

  1. 在axios设置
import axios from 'axios'
import store from '@/store'
import { getToken } from '@/utils/auth'

// 创建一个 axios 实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
  // withCredentials: true, // 跨域请求时发送Cookie
  timeout: 20000 // 请求超时10s
})
// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么

    // if (store.getters.token) {
    // // 让每个请求携带令牌
    //  config.headers['token'] = getToken()
    // }
    config.cancelToken = new axios.CancelToken(cancel => {
      store.commit('addCancelToken', cancel)
    })
    return config
  },
  error => {
    // 处理请求错误
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
 /**
   * 通过自定义代码确定请求状态
   */
  response => {},
  error => {
	if (!axios.isCancel(error)) {
   	// 处理错误
   }
 }
)
  1. 在Vuex设置
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state = {
  cancelTokenArr: []
}

const mutations = {
  addCancelToken(state, cancel) {
    state.cancelTokenArr.push(cancel)
  },
  clearCancelToken(state) {
    state.cancelTokenArr.forEach(c => {
      c()
    })
    state.cancelTokenArr = []
  }
}

const store = new Vuex.Store({
  state,
  mutations
})

export default store
  1. 路由跳转设置
router.beforeEach((to, from, next) => {
 store.commit('clearCancelToken')
 next()
})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值