在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.datathis.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就是当前应用的vmVue.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 = isFirstthis.isLoading = isLoadingthis.errMsg = errMsgthis.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安装与应用【附带图片讲解】_codnan的博客-CSDN博客_安装事件总线Vue全局事件总线$bus安装与应用【附带图片讲解】https://blog.csdn.net/annans/article/details/124658904

vue如何请求后端数据相关推荐

  1. VUE定时器请求后端数据

    mounted:function(){this.timer = setInterval(this.autoPrintBtnClicked, 60100);//60秒后运行 autoPrintBtnCl ...

  2. vue打开后端html文件,vue中怎么请求后端数据?

    vue中怎么请求后端数据?下面本篇文章给大家介绍一下vue 请求后台数据.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. vue 请求后台数据 需要引用vue-resource 安装 ...

  3. TP5后端,VUE前端请求聚合数据新闻接口

    问题描述: TP5当后端,VUE当前端, 请求聚合数据新闻接口 演示效果如下: ps: 最开始加载页面的时候,只加载本地的文件(因为请求次数有限制) 问题解决: 1: vue 文件: <temp ...

  4. TP5后端,VUE前端请求聚合数据驾照题库

    选择效果: 演示效果: 1: Vue 配置: /config/index.js 'use strict' // Template version: 1.3.1 // see http://vuejs- ...

  5. TP5后端,VUE前端请求聚合数据成语大全

    PS: 聚合接口上描述的是成语大全,其实只是以用户查找字为开头的成语而已.先上演示效果: 1: VUE 前端代码 <template><div class="content ...

  6. TP5后端,VUE前端请求聚合数据天气接口

    问题描述: TP5 当后端 VUE 当前端 请求聚合数据天气接口 问题解决: 演示效果 前端 VUE 代码: <template><div class="whether-t ...

  7. TP5后端,VUE前端请求聚合数据过去的今天

    先上效果: 1: 前端 vue 文件: <template><!--接口地址 http://v.juhe.cn/todayOnhistory/queryEvent.php参数名 类型 ...

  8. vue中请求的数据 时间戳转换时间

    前言 下面是vue中将请求的数据中的时间戳 转化成标准时间,下面是我总结的两种方式: 第一种方式: 这里是在vue请求的数据中将时间戳转换字符串的 这是代码中的关键部分 //item.add_time ...

  9. Vue项目中前端请求后端数据的两种方式

    1.JS方式,使用fetch函数,较底层 //JS方式请求分页数据 fetch("http://localhost:9090/user/page?pageNum=" +this.p ...

最新文章

  1. 30道linux面试题与答案(21-30)
  2. Vb自动读取本地HTML,VB获取网页源代码的五种方法
  3. python和php-PHP和Python如何选择?或许可以考虑这三个问题
  4. 【数据竞赛】Kaggle竞赛宝典国内外竞赛方案汇总
  5. 机器学习(part2)--线性方程组的列表达
  6. 中国微型计算机分省市产量数据统计,2017年6月中国微型计算机设备产量统计数据分析...
  7. drools 7.x KIE API解析
  8. Python第三方库使用——splinter
  9. MySql学习10-----存储过程和函数
  10. Mysql中contact、group_concat、concat_ws、repeat
  11. 如何将Excel工作表另存为PDF
  12. HP笔记本ProBook 445R G6刷BIOS历险记
  13. 数据中心断路器整定值计算(二)
  14. 帮你选处理器:CPU T9500-p9500-T9400-T9300-p8700对比分析!
  15. python将输入的字符串反转过来_如何实现python字符串反转?
  16. 浅谈 “空指针、野指针、void*”
  17. POJ - 2187 Beauty Contest (求距离最远点对-凸包+旋转卡壳/枚举 (旋转卡壳学习))
  18. PYNQ系列学习(三)|pynq与zynq对比(二)
  19. Xshell7 要继续使用此程序,您必须应用最新的更新或使用新版本
  20. sqlDbx连接oracle64位

热门文章

  1. Can you anthenticate to this website?
  2. mongodb创建2D索引
  3. 版权是什么意思?版权有哪些权利呢?
  4. Qt编写控件属性设计器2-拖曳控件
  5. Python学生管理系统——面向对象版本
  6. cnpm 网络不能连接_Android 架构之长连接技术
  7. web前端--overflow用法详解
  8. 快速搭建基于beanstalk的php消息队列服务
  9. android数据漫游,测量Android上的数据漫游流量?
  10. 【C++大作业】实现俄罗斯方块(附代码+实现思路带详细注释)