Vue / axios / props 调用后端接口数据并渲染到页面
情景介绍
给了一个可视化大屏的代码,代码上写的是假数据。现在要调用后端接口获取数据,并将其渲染到页面上。
分析问题
给的代码是一个 vue 组件嵌套一个子组件,要把数据渲染到子组件上。
- 要调用后端接口,写 axios 调用接口。
- 接口数据要渲染到一个子组件上,父子组件传值要用到 props
- 子组件中需要的数据是数组,接口得到的数据是数组包含很多个对象,需要处理。
1.axios调用接口
@/utils/requests.js // 在 utils 中存放通用工具函数 request.js
import axios from axiosaxios.defaults.baseURL = 'http://www.test.com';
axios.defaults.headers.post['Content-Type'] = 'application/json';
axios.defaults.headers.post['X-Requested-With'] = 'XMLHttpRequest';
axios.defaults.timeout = 30000;...export default {get(url,params) {return axios({method: 'get',url,params}).then(response => {return response.data;})}
}
@/api/page/test.js // 写业务场景下调用接口函数
import http from '@/utils/request';export const getList = () => {return http.get('/api/List');
}
@/views/father.vue // 在父组件页面调用接口获取数据
<template><div><!-- data是Son组件的props自定义属性 --><Son :data="list"></Son></div>
</template><script>
import Son from '@/components/Son';
import { getList } from '@/api/page/test';export default {data () {return {list:[], // 存储获取到的数据}},components: {Son},mounted: {getListData()},methods: {getListData() {// 这里getList获取到的res是接口返回的所有内容(包含code、msg、data等),里面只有data是业务数据getList().then(res => {this.list = res.data;})}}
}
</script>
2.props组件间数据共享
@/components/Son.vue // 子组件里写props获取父组件里的数据
<script>
export defalut {props: {// 子组件中用于接收父组件数据的自定义属性data: {type: Array,default: () => [['1234','zhangsan','2022-10-12','content'],// ...['1234','zhangsan','2022-10-12','content']]}}
}
</script>
3.处理数据
可以发现子组件中需要的数据格式是
[[...],[...]
]
而现在获取到的数据格式是
[{...},{...}
]
我的思路是循环拿出数据中的每一个 Object,然后将 Object 转成数组。修改 father.vue里的
<script>
export default {data () {return {list:[], // 存储获取到的数据}},//...methods: {getListData: {// 这里的res是接口返回的所有内容getList().then(res => {for(let i in res.data) {let arr = Object.values(res.data[i]);this.list.push(arr);}})}}
}
</script>
优化
处理数据这边我只思考了如何把 Object 转成数组,放到 list[] 里传给子组件。但是这样做对接口数据的处理还是比较粗糙的,如果子组件只想拿部分接口数据就有问题了。
请教前辈的代码写法:
<script>
export default {data () {return {list:[], // 存储获取到的数据}},//...methods: {getListData: {// 这里的res是接口返回的所有内容getList().then(res => {if(res.data && res.data.length > 0) {res.data.forEach(item => {this.list.push([item.Number, item.Name, item.Date, item.Content]);});}});}}
}
</script>
解读
forEach() 可以调用数组每个元素,并将元素传递给回调函数。
注意:forEach() 对于空数组是不会执行回调函数的。
现在不是拿到数组包对象形式的数据吗,用 forEach() 调用数组中每一个 Object ,然后 Object 传递给回调函数参数 item,通过 item 拿到指定的数据放到数组中,最后将数组 push 进 list[] 。
总结
其实 forEach() 思想也是循环,但是关键点在调用到每个 Object 后,用 Object.
的形式拿到对象里指定的数据这一步我没考虑到,而且 forEach() 的写法简洁美观。
这次尝试学习到的3点:
- axios 请求接口数据
- props 组件间数据共享
- forEach() 方法
Vue / axios / props 调用后端接口数据并渲染到页面相关推荐
- vue 项目 前端 模拟后端接口数据(vue2,vue3)
项目中或者平常自己创建demo的过程中,往往需要后端配合,但是有时候没有后端,又需要数据,此时就展示了我们前端的强大之处,自己模拟后端接口数据. 如果自定义一个模拟后端数据, 首先创建一个文件夹放置后 ...
- axios解决调用后端接口跨域问题
vue-cli通过是本地代理的方式解决接口跨域问题的.但是在vue-cli的默认项目配置中这个代理是没有配置的,如果现在项目中使用,必须手动配置config/index.js文件 ... proxyT ...
- 前端如何调用后端接口
前端可以通过 Ajax,Fetch API,Axios 等方式调用后端接口. Ajax:使用 XMLHttpRequest 对象或者使用现代浏览器提供的 fetch() API. Fetch API: ...
- Vue调用后端接口http ajax请求组件封装及proxyTable跨域问题解决超详细案例
前端调用后端接口,使用axios,因为v-resource组件官方已不再维护了: res形参封装了整个响应结果: Vue提供的proxyTable组件用于解决跨域问题:(服务器与服务器之间的相互请求不 ...
- vue调用接口修改密码_vue开发前后端分离前端如何调用后端接口?
对前后端分离如何调用接口这块感觉一直没怎么弄明白,但又不知如何说明,下面我模拟一个项目说明我的问题. 现在我们有个项目,前端用vue开发,后端php开发,后端测试地址为:localhost:8181, ...
- 前端调用后端接口的错误(400)
前端调用后端接口时,浏览器debug出现Failed to load resource: the server responded with a status of 400 (Bad Request) ...
- vue项目 - Mockjs 模拟后台接口数据
Mock 可以进行生成随机数据,模拟后端接口数据,从而实现开发时,前后端分离,提高效率. 1.安装 npm i mockjs -S or yarn add mockjs 2.引入 在src文件目录下, ...
- 小程序---调用后端接口的方法
小程序---调用后端接口的方法 学习小程序一段时间了,写页面对我来说没有任何问题.最近学习如何请求后端接口,本来想请求项目中正在用的接口,可是无缘,微信小程序不允许.官方给出的提示是,接口必须有域名且 ...
- Nginx解决前端调用后端接口跨域问题
Nginx解决前端调用后端接口跨域问题 参考文章: (1)Nginx解决前端调用后端接口跨域问题 (2)https://www.cnblogs.com/wangymd/p/11200746.html ...
- PHP:使用curl请求聚合支付的驾考宝典题库接口数据, 并渲染到页面上;composer 常用的指令;mvc pathinfo 路由映射实现
PHP:使用curl请求聚合支付的驾考宝典题库接口数据, 并渲染到页面上;composer 常用的指令;mvc pathinfo 路由映射实现 一. API 基础知识 url 的相关知识 1.1 一切 ...
最新文章
- kubeadm源码分析(内含kubernetes离线包,三步安装)
- 对网络中安全审计产品的理解
- 主流的Python领域和框架--转
- eclipse jsp没有提示_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
- Hive安装及常用交互命令
- 【JS 逆向百例】DOM 事件断点调试,某商盟登录逆向
- VC++ HIDAPI实现USB数据读写
- NOI2018退役记
- linux zip压缩比1000,linux下压缩工具总结与使用(参考私房菜)
- Django深入模板引擎
- 【游戏开发创新】自学Blender建模,自制孔明灯,在Unity中点亮整个星空,愿新年,胜旧年(Unity | 建模 | 粒子系统 | 预设)
- [渝粤教育] 四川轻化工大学 化工设备机械基础 参考 资料
- Blend for Visual Studio 概述
- 51单片机-PWM调速(直流电机,智能小车的电机调速)
- JS实现点击按钮图片左右切换、点击图片按钮出现下拉菜单
- Java程序员之从菜鸟到职场高手的必看...
- 67. 把字符串转换成整数
- Unity优化之Graphics相关
- WebDAV之葫芦儿·派盘+纯纯写作
- 私有部署、重构企业软件,第四范式发布大模型“式说”