vue 请求后端数据的示例代码

 更新时间:2022年09月09日 09:34:45   作者:星悦糖  
在vue中,我们如何通过请求接口来访问后端的数据呢?在这里简单总结了一个小示例,对vue请求后端数据实例代码感兴趣的朋友一起看看吧

在vue中,我们如何通过请求接口来访问后端的数据呢?在这里简单总结了一个小示例:

主要问题:如果不封装的话,在每次请求的时候都要书写一遍下面的代码,造成代码冗余。

1、在src目录下创建一个utils文件夹,然后在里面创建一个js文件。这里我创建了一个request.js文件。

/*引入axios*/
import axios from 'axios'
const request = axios.create({
    baseURL: 'http://localhost:8280/user', // 基础路径,将统一的部分全部封装
    withCredentials: true // 表示请求可以携带cookie
})
//前端采用export.default,在写后端代码时用module.export
export default request

在app.vue中进行测试:

<script>
import request from './utils/request'
 
export default {
  created() {
    request({
      method:'GET',
      url:'/products',
      params:{test:'111',hello:'world'},
    })
  },
}
</script>

2、在src文件夹下创建一个api文件夹,根据不同的功能进行分组,分别写不同的接口。这里我创建了一个product.js。

import request from '../utils/request';
 
export function getList(params={}) {
    return request({
        methods:'GET',
        url:'/products',
        params,
    })
}
 
export function getProduct(id) {
    return request({
        methods:'GET',
        url:'/products/${id}',
    })
}
export function update(id,data) {
    return request({
        methods:'PUT',
        url:'/products/${id}',
        data,
    })
}

3、在api文件夹下创建index.js

import products from './products';
 
export default{
    products,
}

4、在main.js中引入api文件夹下的index。

import api from './api/index.js';
 
Vue.prototype.$api = api

5、此时通过接口获取后端数据的方式就变成了如下格式:

getProducts(){
    this.$api.products.getList(this.query).then((response)=>{
        this.products = response.data.data
        this.total = response.data.total
    })
}

6、列表展示案例:

main.js中添加代码

import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios';
 
//Vue.prototype.$http=axios;//修改内部的$http为axios  $http.get("") .post()
 
Vue.config.productionTip = false
 
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  render:h => h(App),
  beforeCreate() {
    //安装全局事件总线,$bus就是当前应用的vm
    Vue.prototype.$bus = this
  },
 
})

App.vue中添加代码

<template>
  <div>
    <Search/>
    <List/>
  </div>
</template>
 
<script>
import List from "./components/List";
import Search from "./components/Search";
export default {
  name: 'App',
  components: {Search, List},
}
</script>
 
<style>
 
</style>

router下的index.js中的代码

import Vue from 'vue'
import Router from 'vue-router'
 
Vue.use(Router)
 
export default new Router({
  routes: [
 
  ]
})

list.vue代码示例:

<template>
  <div class="row">
    <!--展示用户数据-->
    <div class="card" v-show="info.users.length" v-for="user in info.users" :key="user.login">
      <a :href="user.html_url" target="_blank">
        <img :src="user.avatar_url" style="width: 100px"/>
      </a>
      <p class="card-text">{{user.login}}</p>
    </div>
    <!--展示欢迎词-->
    <h1 v-show="info.isFirst">欢迎使用</h1>
    <!--展示加载中-->
    <h1 v-show="info.isLoading">加载中....</h1>
    <!--展示错误信息-->
    <h1 v-show="info.errMsg">{{info.errMsg}}</h1>
  </div>
</template>
 
<script>
export default {
  name: "List",
  data(){
    return{
     info:{
       isFirst:true,//是否是初次展示
       isLoading:false,//是否处于加载中
       errMsg:'',
       users:[],
     }
    }
  },
  //使用全局事件总线在两个组件之间传递数据
  //接收数据:list组件想接收数据,则要在list组件中给$bus绑定自定义事件,事件的回调留在list组件自身。
  mounted() {
    this.$bus.$on('updateListDate',(dataObj)=>{
      console.log(dataObj)
      this.info = {...this.info,...dataObj};
      /*this.isFirst = isFirst
      this.isLoading = isLoading
      this.errMsg = errMsg
      this.users = users*/
    })
  },
}
</script>
 
<style scoped>
 
</style>

search.vue代码示例:

<template>
  <section class="jumbotron">
    <h3 class="jumbotron-heading"> search gitHub Users</h3>
    <div>
      <input type="text" placeholder="enter the name you search" v-model="keyWord"/>&nbsp;
      <button @click="searchUsers" >Search</button>
    </div>
  </section>
</template>
<script>
import axios from 'axios';
export default {
  name: "Search",
  data(){
    return{
      keyWord:''
    }
  },
  methods:{
    searchUsers(){
      //请求前更新list里面的数据
      this.$bus.$emit('updateListDate',{isFirst:false,isLoading:true,errMsg:'',users:[]})
      axios.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(
        res =>{
          console.log("请求成功")
          //提供数据:search组件要给list组件传递数据,就要触发list组件中的自定义事件并携带要传递的数据
          //请求成功后更新list里面的数据
          this.$bus.$emit("updateListDate",{isLoading:false,errMsg:'',users:res.data.items})
        },
        error =>{
          console.log("请求成功",error.message)
          //请求失败后更新list里面的数据
          this.$bus.$emit("updateListDate",{isLoading:false,errMsg:error.message,users:[]})
        }
      )
    }
  },
}
</script>
 
<style scoped>
 
</style>
 

注:Vue全局事件总线$bus安装与应用【附带图片讲解】可以参考下面的地址:

Vue全局事件总线$bus安装与应用【附带图片讲解

到此这篇关于vue请求后端数据的文章就介绍到这了,更多相关vue请求后端数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue router 路由安装及使用过程

    Vue router 路由安装及使用过程

    vue-router 是 Vue 的一个插件库,适用于构建单页面应用,这篇文章主要介绍了Vue router 路由安装以及使用,本文通过示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • Vue中@keyup.enter @v-model.trim的用法小结

    Vue中@keyup.enter @v-model.trim的用法小结

    这篇文章主要介绍了Vue中@keyup.enter @v-model.trim的用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • vue 更改连接后台的api示例

    vue 更改连接后台的api示例

    今天小编就为大家分享一篇vue 更改连接后台的api示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 在线使用iconfont字体图标的简单实现

    在线使用iconfont字体图标的简单实现

    这篇文章主要介绍了在线使用iconfont字体图标的简单实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue.js使用watch监听路由变化的方法

    vue.js使用watch监听路由变化的方法

    这篇文章主要介绍了vue.js使用watch监听路由变化的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Vue3使用transition实现组件切换的过渡效果

    Vue3使用transition实现组件切换的过渡效果

    <Transition> 是一个内置组件,这意味着它在任意别的组件中都可以被使用,无需注册,它可以将进入和离开动画应用到通过默认插槽传递给它的元素或组件上,本文介绍了Vue3使用transition实现组件切换的过渡效果,需要的朋友可以参考下
    2024-09-09
  • Vue使用vue-area-linkage实现地址三级联动效果的示例

    Vue使用vue-area-linkage实现地址三级联动效果的示例

    很多时候我们需要使用地址三级联动,即省市区三级联动,这篇文章主要介绍了Vue使用vue-area-linkage实现地址三级联动效果的示例,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Vue3中使用qrcode库实现二维码生成

    Vue3中使用qrcode库实现二维码生成

    Vue3中实现二维码生成需要使用第三方库来处理生成二维码的逻辑,常用的库有 qrcode和 vue-qrcode,本文主要介绍了Vue3中使用qrcode库实现二维码生成,感兴趣的可以了解一下
    2023-12-12
  • Vue3实现获取验证码按钮倒计时效果

    Vue3实现获取验证码按钮倒计时效果

    这篇文章主要介绍了Vue3实现获取验证码按钮倒计时效果,用户点击获取验证码按钮,发送请求给后端,按钮失效,并且开始倒计时60秒;在此期间,用户无法再次点击按钮,即使用户刷新页面,倒计时依然存在,直到倒计时完毕,按钮恢复,感兴趣的小伙伴跟着小编一起来看看吧
    2024-10-10
  • Vue父子组件传值&自定义事件方式

    Vue父子组件传值&自定义事件方式

    这篇文章主要介绍了Vue父子组件传值&自定义事件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论