el-tabs 切换时还在请求上一个页面接口

解决方法:

因为后端接口返回数据较慢,切换页面或(tabs)中断上一个页面的axios请求

步骤:

1. 在main.js,全局挂载一个$httpRequestList

Vue.$httpRequestList = [] // 用来装cancel函数

2. 在require文件封装的axios请求里面,将cancel函数推入httpRequestList数组:

service.interceptors.request.use(
  (config) => {
    config['cancelToken'] = new axios.CancelToken(function executor(cancel) {
      Vue.$httpRequestList.push(cancel) //存储cancle
    })
    ......
    return config;
  },
  (error) => {
    return Promise.reject(error);
  },
)

   响应拦截器,切换页面会走这里

// response interceptor
service.interceptors.response.use(
  (response) => {
  ......
  },
  (err) => {
    if(err.message === 'interrupt') {
      console.log('请求中断');
      return new Promise(() => {});
    }
  }
)

3.定义function, 在需要中断的时候调用(一般在路由拦截中或者tabs切换时调用函数)

<el-tabs v-model="activeName" type="card" @tab-click="handleClick">
  <el-tab-pane label="主机状态" name="main">
    <boardMiam v-if="activeName === 'main'" > </boardMiam>
  </el-tab-pane>
  <el-tab-pane label="通道信息配置" name="role">
    <boardRole v-if="activeName === 'role'" > </boardRole>
  </el-tab-pane>
</el-tabs>

   当前页面引入import Vue from 'vue'

handleClick(tab, event) {
  ......
  // 判断是否有存储的cancle
  if (Vue.$httpRequestList.length > 0) {
    Vue.$httpRequestList.forEach((item) => {
      // 给个标志,中断请求
      item('interrupt');
    });
    Vue.$httpRequestList = [];
  }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值