淘先锋技术网

首页 1 2 3 4 5 6 7

一、axios在vue组件中直接发起请求

vue组件:

<template>
  <div class="right-container">
    <h3>Right 组件</h3>
    <button @click="getInfo">发起 GET 请求</button>
    <button @click="postInfo">发起 POST 请求</button>
  </div>
</template>

<script>
// 1. 导入axios
import axios from 'axios'

// 2. 发起请求
export default {
  methods: {

    // 发起GET请求
    async getInfo() {
      const { data: res } = await axios.get(''http://www.liulongbin.top:3006/api/get')
      console.log(res)
    },

    // 发起POST请求
    async postInfo() {
      const { data: res } = await axios.post('http://www.liulongbin.top:3006/api/post', { name: 'zs', age: 20 })
      console.log(res)
    }

  }
}
</script>

二、在vue项目中全局配置axios

    • 简化axios的导入

上面的方法,需要在每个组件中都导入axios,太麻烦。

如果在main.js文件中进行如下配置:把 axios 挂载到 Vue.prototype 上,供每个 .vue 组件的实例直接使用,之后的vue组件中都不需要再单独导入axios,可以直接调用 this.$http.xxx

// 导入axios
import axios from 'axios'

// 把 axios 挂载到 Vue.prototype 上(起名叫$http,或其他名字均可),供每个 .vue 组件的实例直接使用
Vue.prototype.$http = axios

// 今后,在每个 .vue 组件中要发起请求,直接调用 this.$http.xxx

vue组件:

<template>
  <div class="right-container">
    <h3>Right 组件</h3>
    <button @click="getInfo">发起 GET 请求</button>
    <button @click="postInfo">发起 POST 请求</button>
  </div>
</template>

<script>
// 不需要在导入axios,直接发起请求
export default {
  methods: {

    // 发起GET请求
    async getInfo() {
      // 通过组件实例访问到原型上的$http属性的get方法
      const { data: res } = await this.$http.get(''http://www.liulongbin.top:3006/api/get')
      console.log(res)
    },

    // 发起POST请求
    async postInfo() {
      const { data: res } = await this.$http.post('http://www.liulongbin.top:3006/api/post', { name: 'zs', age: 20 })
      console.log(res)
    }

  }
}
</script>

缺点:如果把 axios 挂载到 Vue 原型上,无法实现 API 接口的复用。

2. 简化URL

按照之前的写法,如果URL发生更改,那么需要将每个vue组件中的URL都进行修改。

可以在main.js文件全局配置 axios 的请求根路径,在vue组件的URL中就不需要再写完整的请求地址

// 全局配置 axios 的请求根路径
axios.defaults.baseURL = 'http://www.liulongbin.top:3006'

vue组件:

<template>
  <div class="right-container">
    <h3>Right 组件</h3>
    <button @click="getInfo">发起 GET 请求</button>
    <button @click="postInfo">发起 POST 请求</button>
  </div>
</template>

<script>
// 不需要在导入axios,直接发起请求
export default {
  methods: {

    // 发起GET请求
    async getInfo() {
      // 通过组件实例访问到原型上的$http属性的get方法
      // 不需要再写完整的请求地址
      const { data: res } = await this.$http.get('/api/get')
      console.log(res)
    },

    // 发起POST请求
    async postInfo() {
      const { data: res } = await this.$http.post('/api/post', { name: 'zs', age: 20 })
      console.log(res)
    }

  }
}
</script>