• 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 所以导入的时候必须带{}
  • 相关阅读:
    域环境下如何保护重要资料文件的安全(一)EFS加密(上)
    软件开发过程(CMMI/RUP/XP/MSF)是与非
    CMMI5在项目中的精简应用
    小型软件企业实施CMMI过程改进案例
    【转】plsql中ordered什么场合使用
    【转】C# Socket编程笔记
    某一个字段去重,其他字段全部查询的解决办法
    从Excel中导入数据时,提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。
    oracle创建远程数据库连接dblink
    【转】eclipse 查看原始类出现The jar file rt.jar has no source attachment解决方法
  • 原文地址:https://www.cnblogs.com/dianzan/p/8831817.html
Copyright © 2020-2023  润新知