zoukankan      html  css  js  c++  java
  • 5 vue-cli整合axios的几种方法

     

    vue-cli配置axios

    https://www.cnblogs.com/rinzoo/p/7880525.html

    https://www.cnblogs.com/XHappyness/p/7677153.html

     

    1. 

    npm install axios --save

    2. 

    npm install @type/axios --save-dev(使用ts编写的需要此声明文件,升级的axios好像不需要了,已经自带)

    3. 

    在src目录下添加axios.ts文件,内容:

    复制代码
    import axios from 'axios'
    import {Notification} from 'element-ui'
    import store from './store/index'
    import buildconf from '../config/build.rootpath.js'
    
    axios.defaults.withCredentials = true;
    axios.defaults.baseURL = buildconf.serverUrl
    // axios.defaults.baseURL = 'http://gsblackwidow.chinacloudsites.cn/'
    
    axios.interceptors.request.use(function(config) {
      // document.getElementById('g-loader').style.display = 'flex'
      store.commit('requestModify', 1)
      return config;
    }, function(error){
      return Promise.reject(error)
    })
    
    axios.interceptors.response.use(function(response){
      store.commit('requestModify', -1)
      // document.getElementById('g-loader').style.display = 'none'  
      return response.data;
    }, function(error){
      store.commit('requestModify', -1)  
      // document.getElementById('g-loader').style.display = 'none'    
      if(error.response.status === 401){
        Notification({
          title: '权限无效',
          message: '您的用户信息已经失效, 请重新登录',
          type: 'warning',
          offset: 48
        });
        window.location.href = '/#/login'
      }else{
        Notification({
          title: '请求错误',
          message: `${error.response.status} 
     ${error.config.url}`,
          type: 'error',
          offset: 48,
        })
      }
      return Promise.reject(error)
    })
    
    export default axios
    复制代码

    4.

    types文件夹中新建vue.d.ts文件,内容:

    import {AxiosStatic, AxiosInstance } from 'axios'
    declare module 'vue/types/vue' {
      interface Vue {
        $axios: AxiosStatic;
      }
    }

    这样就可以在各个模块中通过this.$axios来使用axios了

    其中axios中:

    1. build.rootpath.js内容:

    var path = require('path')
    var rootpath = path.resolve(__dirname, '../dist')
    module.exports = rootpath

    2. store是vuex的文件,所以要事先安装vuex

    Vue这个框架现在在单页面应用方面非常受人欢迎。

    基于vue-cli创建的项目怎么样才能更好地处理网络请求?

    首选的应该就是axios了

    这次给刚接触vue的新手介绍一下axios在vue中如何使用

    安装的话自己去官网看

    一、不推荐的方法

    复制代码
    //在要使用网络请求的组件中导入axios
    import axios from 'axios' 
    export default {
      name: 'HelloWorld',
      data () {
        return {
          params:{}
        }
      },
      methods: {
    //在这里调用网络请求
        request(){
          axios.get(`url${this.params}`).then(result=>{
            console.log(result)
        })
        }
      }
    }
    复制代码

    这种方法比较麻瓜哪个文件要用就  import axios from 'axios' ,但是太过繁琐,也不利于维护。

    二、网络请求较少

    复制代码
    //打开main.js全局导入axios
    
    import Vue from 'vue'
    import App from './App'
    import router from './router'
    import axios from 'axios'
    
    //存在prototype中
    Vue.prototype.$http = axios
    
    //需要使用axios的其他组件调用时可以通过两种方法
    //Vue.$http.get(`url${params}`)
    //this.$http.get(`url${params}`)
    //但是这样使用会出现一个问题,在单独的js文件中这样做调用不了$http,原因是没有Vue的实例。大多数情况下用这种方法就可以满足大部分需求了
    
    Vue.config.productionTip = false
    
    /* eslint-disable no-new */
    new Vue({
      el: '#app',
      router,
      template: '<App/>',
      components: { App }
    })
    复制代码

    三、推荐方法

    用方法二已经可以满足大部分需求了,写的时候也比较爽,但是后期如果接口改变,还要一个个去查找修改,会显得很杂乱

    这里推荐一种自己平时的做法

    复制代码
    //新建一个JS命名为api
    import axios from 'axios' 
    //在api中导入axios
    let base = '/v1'
    
    //把整个项目的网络请求都写在这个文件中用export导出
    
    export const getproduct = params => { return axios.get(`${base}/product/info/${params}`) }
    
    //这样写方便管理整个项目的网络请求
    复制代码
    复制代码
    //在我们要是用这个请求时比如说getproduct
    
    import {
        getproduct
      }from '../api/api';
    export default {
      name: 'HelloWorld',
      data () {
        return {
          params:{}
        }
      },
      methods: {
        getProductList(){
          getproduct(this.params).then(result=>{
            console.log(result);
          })
        }
      }
    }
    //注意我们导出的时候用的是export 所以导入的时候必须带{}
  • 相关阅读:
    NOIP2011 D1T1 铺地毯
    NOIP2013 D1T3 货车运输 倍增LCA OR 并查集按秩合并
    POJ 2513 trie树+并查集判断无向图的欧拉路
    599. Minimum Index Sum of Two Lists
    594. Longest Harmonious Subsequence
    575. Distribute Candies
    554. Brick Wall
    535. Encode and Decode TinyURL(rand and srand)
    525. Contiguous Array
    500. Keyboard Row
  • 原文地址:https://www.cnblogs.com/dianzan/p/8831817.html
Copyright © 2011-2022 走看看