使用Axios与后端进行数据交互

一、安装

npm install axios

main.js中导入:

import axios from 'axios'

        并且可以在main.js中为axios设置一个baseURL,这样就不用在项目中到处输入网址了,在main.js中设置一遍,其他的地方

// 给axios对象配置一个baseUrl
axios.defaults.baseURL = "http://localhost:8088"

// 将axios作为全局的自定义数学,每个组件可以在内部直接调用$http进行调用axios
Vue.prototype.$http = axios  #vue2的写法

app.config.globalProperties.$http = axios  #vue3写法

二、前端获取后端数据

        下面的created是在组件新创建的时候调用(但是注意其内部的方法却是一个回调方法),注意这里的写法,和一般的函数不一样,他后面用到了=>,这样的写法可以使得this跟父方法属于一个作用域,不然 this.tableData和response不是同一个作用域,这样就拿不到数据。

正确写法
  this.$http.get("/user/findAll").then((response)=>{
        this.tableData = response.data
      })

//错误写法,会报错:Uncaught (in promise) TypeError: Cannot set properties of undefined ( setting 'tableData')

下面代码里的两个this不属于同一个作用域,因此拿不到数据
  this.$http.get("/user/findAll").then(function(response){
        this.tableData = response.data
      })
export default {
    created:function(){
        //注意这一条代码的两个this,必须这样风格的=>写,不然不是一个作用域。
      this.$http.get("/user/findAll").then((response)=>{
        this.tableData = response.data   //tableData是渲染一个表格组件所需的数据变量,见template里面的变量
      })
    },
    data() {
      return {
        tableData: []
      }
    }
}
</script>


//下面的代码是基于element-ui的一个表格的代码,渲染该表格需要给tableData数据变量赋值
<template>
    <div>
    <el-table
    :data="tableData"
    style="width: 100%"
    :row-class-name="tableRowClassName">
    <el-table-column
      prop="id"
      label="编号"
      width="180">
    </el-table-column>
    <el-table-column
      prop="username"
      label="姓名"
      width="180">
    </el-table-column>
    <el-table-column
      prop="birthday"
      label="生日">
    </el-table-column>
  </el-table>
    </div>
</template>

然后就将response的data放到了this.tableData变量中,前端就可以对tableData进行渲染。

### Vue 使用 Axios 进行前后端数据交互 #### 方法一:定义全局方法并调用 为了简化开发流程,可以在项目的`utils/request.js`文件中创建一个通用的HTTP请求工具类[^2]。 ```javascript // utils/request.js import axios from 'axios' export function getList() { return axios.get('http://localhost:8080/api/data'); } ``` 在组件内部可以通过引入此函数来发起网络请求: ```javascript <script> import {getList} from '@/utils/request'; export default { data() { return { dataList: [] } }, methods: { fetchData() { getList().then(response => { this.dataList = response.data; }).catch(error => { console.error("There was an error fetching the data!", error); }); } }, mounted() { this.fetchData(); } }; </script> ``` #### 方法二:直接在组件内集成Axios实例 如果不想额外配置公共API接口,则可以直接在单个Vue组件里边导入和使用axios库[^3]。 ```html <template> <div class="example"> <!-- 组件模板 --> </div> </template> <script> import axios from "axios"; export default { name: "ExampleComponent", data() { return { responseData: null, }; }, created() { this.test(); }, methods: { test() { this.axios.get("/api/user/test").then((res) => { console.log(res.data); // 处理返回数据 }); }, }, }; </script> ``` 上述两种方式都可以实现前端向后端发送GET请求的功能。第一种更适合大型应用,有助于维护统一的API管理;第二种则更加灵活便捷适用于小型项目或快速原型设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值