zoukankan      html  css  js  c++  java
  • vue axios配置 发起请求加载loading请求结束关闭loading

    axios带有请求拦截器,避免在每个请求里面加loading重复操作,可以封装进去,在请求开始时加载loading层,请求结束关闭,loading层用vux的loading加载

    axios.js

    import axios from 'axios'
    import Vue from 'vue'
    
    // 超时时间
    axios.defaults.timeout = 15000;
    // axios.defaults.withCredentials=true;
    // http请求拦截器
    axios.interceptors.request.use(config => {
      Vue.$vux.loading.show({
        text: 'Loading'
      })
      return config
    }, error => {
      setTimeout(() => {
         Vue.$vux.loading.hide();
         Vue.$vux.toast.text('加载超时', 'middle')
      },3000)
      return Promise.reject(error)
    })
    // http响应拦截器
    axios.interceptors.response.use(data => {// 响应成功关闭loading
      Vue.$vux.loading.hide()
      return data
    }, error => {
      setTimeout(() => {
        Vue.$vux.loading.hide()
        Vue.$vux.toast.text('请求失败', 'middle')
      },1000)
      return Promise.reject(error)
    })
    
    export default axios;

    封装get和post方法 axios.service.js

    import axios from './axios';
    
    class myAxios{
    
      getUrl(url){
        return `${__ce.baseURL}${url}`; // 打包时用这个 __ce.baseURL
       // return `/api${url}`; // 防止跨域,开发环境用这个代理
      };
    
      //公共ajax;
      postServer(opt) {
    
        let data = {};
        if (opt.data) {
          data = opt.data;
        }
        axios.post(opt.url, data).then((response) => {
          console.log(response);
          if(!response.data.status){
            return;
          }
          if (opt.onSuccess) {
            opt.onSuccess(response);
          }
        }).catch(error => {
          if (opt.onFailed) {
            opt.onFailed(error);
          }
        });
      }
    
      // get 请求
      getServer(opt) {
        let data = {};
        if (opt.data) {
          data = opt.data;
        }
        axios.get(opt.url, {params: data}).then((response) => {
          if (opt.onSuccess) {
            opt.onSuccess(response);
          }
        }).catch(error => {
          if (opt.onFailed) {
            opt.onFailed(error);
          }
        });
      }
    
    
      setData(opt) {
        let data = {};
        if (opt.data) {
          data = opt.data;
        }
        return data;
      }
    
    }
    
    export default myAxios;

    封装方法~

    import myAxios from  './axios.service'
    const myAxiosMethods = new myAxios();
    
    class RecordServer{
    
      // 查询订单 -- post方法
      sendMiceIndentSearchServer(opt){
        const data = myAxiosMethods.setData(opt);
        const url = myAxiosMethods.getUrl('/search');// 这里的/search是后端给的接口地址
        myAxiosMethods.postServer({url, data, onSuccess: opt.onSuccess, onFailed: opt.onFailed});
      }
    
    export default RecordServer;

    在页面中使用

    const recordSever = new RecordServer()

    methods:{ _sendSearchServer(){
    // 在需要的地方调用这个方法 recordServer.sendSearchServer({ data: this.params, // params是这个接口需要传递给后台的参数 onSuccess: (res) => { console.log(res) }, onFailed: (err) => { console.log(err) } }) } }
  • 相关阅读:
    使用两个路由器扩展家庭无线网络
    RX(Reactive Extinsion)和IX(Interactive Extinsion)库改名了
    WPF绘制矢量图形模糊的问题
    WPF的二维绘图(二)——几何图形Geometry
    一个C#语法高亮插件
    WPF的二维绘图(一)——DrawingContext
    在.net桌面程序中自定义鼠标光标
    在WebAPI中自动创建Controller
    解决OneNote的无法同步的问题
    使用NuGet Package Project快速制作NuGet包
  • 原文地址:https://www.cnblogs.com/leiting/p/9208552.html
Copyright © 2011-2022 走看看