美文网首页
vue全局使用axios发ajax请求【转载】

vue全局使用axios发ajax请求【转载】

作者: VinSmokeW | 来源:发表于2020-01-02 14:21 被阅读0次

    <meta charset="utf-8">

    首先,我们要通过 npm/Yarn 或一个 CDN 链接安装 axios。
    axios单文件使用例子:请求发送到 https://api.coindesk.com/v1/bpi/currentprice.json。我们首先创建一个 data 里的属性以最终放置信息,然后将会在 mounted 生命周期钩子中获取数据并赋值过去:

    new Vue({
      el: '#app',
      data () {
        return {
          info: null
        }
      },
      mounted () {
        axios
          .get('https://api.coindesk.com/v1/bpi/currentprice.json')
          .then(response => (this.info = response))
      }
    })
    <div id="app">
      {{ info }}
    </div>
    

    如果要多个文件使用axios发ajax请求,简单点就是每个文件引用一次,import axios from 'axios',但是太麻烦了。
    所以介绍方便全局使用的解决方法:
    1.结合 vue-axios使用
    2.axios 改写为 Vue 的原型属性
    3.结合 Vuex的action

    1.结合 vue-axios使用

    vue-axios是按照vue插件的方式写的。结合vue-axios,可以去使用vue.use方法。
    在主入口文件main.js中引用
    import axios from 'axios'
    import VueAxios from 'vue-axios'
    Vue.use(VueAxios,axios);

    之后就可以全局使用this.axios了,在组件文件中的methods里去使用了,下面三种写法都可以

    Vue.axios.get(api).then((response) => {
      console.log(response.data)
    })
     
    this.axios.get(api).then((response) => {
      console.log(response.data)
    })
     
    this.$http.get(api).then((response) => {
      console.log(response.data)
    })
    

    2.axios 改写为 Vue 的原型属性
    首先在主入口文件main.js中引用,之后挂在vue的原型链上
    import axios from 'axios'
    Vue.prototype.$http= axios
    在组件中使用

    this.$http.get('https://api.coindesk.com/v1/bpi/currentprice.json')
          .then(response => (this.info = response))
      }
    })
    

    3.结合 Vuex的action
    在vuex的仓库文件store.js中引用,使用action添加方法

    import Vue from 'Vue'
    import Vuex from 'vuex'
    import axios from 'axios'
    Vue.use(Vuex)
    const store = new Vuex.Store({
      // 定义状态
      state: {
        user: {
          name: 'Tom'
        }
      },
      actions: {
        // 封装一个 ajax 方法
        login (context) {
          axios({
            method: 'post',
            url: '/login',
            data: context.state.user
          })
        }
      }
    })
    
    export default store
    
    在组件中发送请求的时候,需要使用 this.$store.dispatch
    
    methods: {
      submitForm () {
        this.$store.dispatch('login')
      }
    }
    
    

    原文链接:https://www.jianshu.com/p/dcec45f49913

    相关文章

      网友评论

          本文标题:vue全局使用axios发ajax请求【转载】

          本文链接:https://www.haomeiwen.com/subject/zoqooctx.html