情景介绍

给了一个可视化大屏的代码,代码上写的是假数据。现在要调用后端接口获取数据,并将其渲染到页面上。

分析问题

给的代码是一个 vue 组件嵌套一个子组件,要把数据渲染到子组件上。

  1. 要调用后端接口,写 axios 调用接口。
  2. 接口数据要渲染到一个子组件上,父子组件传值要用到 props
  3. 子组件中需要的数据是数组,接口得到的数据是数组包含很多个对象,需要处理。

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 调用后端接口数据并渲染到页面相关推荐

  1. vue 项目 前端 模拟后端接口数据(vue2,vue3)

    项目中或者平常自己创建demo的过程中,往往需要后端配合,但是有时候没有后端,又需要数据,此时就展示了我们前端的强大之处,自己模拟后端接口数据. 如果自定义一个模拟后端数据, 首先创建一个文件夹放置后 ...

  2. axios解决调用后端接口跨域问题

    vue-cli通过是本地代理的方式解决接口跨域问题的.但是在vue-cli的默认项目配置中这个代理是没有配置的,如果现在项目中使用,必须手动配置config/index.js文件 ... proxyT ...

  3. 前端如何调用后端接口

    前端可以通过 Ajax,Fetch API,Axios 等方式调用后端接口. Ajax:使用 XMLHttpRequest 对象或者使用现代浏览器提供的 fetch() API. Fetch API: ...

  4. Vue调用后端接口http ajax请求组件封装及proxyTable跨域问题解决超详细案例

    前端调用后端接口,使用axios,因为v-resource组件官方已不再维护了: res形参封装了整个响应结果: Vue提供的proxyTable组件用于解决跨域问题:(服务器与服务器之间的相互请求不 ...

  5. vue调用接口修改密码_vue开发前后端分离前端如何调用后端接口?

    对前后端分离如何调用接口这块感觉一直没怎么弄明白,但又不知如何说明,下面我模拟一个项目说明我的问题. 现在我们有个项目,前端用vue开发,后端php开发,后端测试地址为:localhost:8181, ...

  6. 前端调用后端接口的错误(400)

    前端调用后端接口时,浏览器debug出现Failed to load resource: the server responded with a status of 400 (Bad Request) ...

  7. vue项目 - Mockjs 模拟后台接口数据

    Mock 可以进行生成随机数据,模拟后端接口数据,从而实现开发时,前后端分离,提高效率. 1.安装 npm i mockjs -S or yarn add mockjs 2.引入 在src文件目录下, ...

  8. 小程序---调用后端接口的方法

    小程序---调用后端接口的方法 学习小程序一段时间了,写页面对我来说没有任何问题.最近学习如何请求后端接口,本来想请求项目中正在用的接口,可是无缘,微信小程序不允许.官方给出的提示是,接口必须有域名且 ...

  9. Nginx解决前端调用后端接口跨域问题

    Nginx解决前端调用后端接口跨域问题 参考文章: (1)Nginx解决前端调用后端接口跨域问题 (2)https://www.cnblogs.com/wangymd/p/11200746.html ...

  10. PHP:使用curl请求聚合支付的驾考宝典题库接口数据, 并渲染到页面上;composer 常用的指令;mvc pathinfo 路由映射实现

    PHP:使用curl请求聚合支付的驾考宝典题库接口数据, 并渲染到页面上;composer 常用的指令;mvc pathinfo 路由映射实现 一. API 基础知识 url 的相关知识 1.1 一切 ...

最新文章

  1. kubeadm源码分析(内含kubernetes离线包,三步安装)
  2. 对网络中安全审计产品的理解
  3. 主流的Python领域和框架--转
  4. eclipse jsp没有提示_JSP+Struts2+JDBC+Mysql实现的校园宿舍管理系统
  5. Hive安装及常用交互命令
  6. 【JS 逆向百例】DOM 事件断点调试,某商盟登录逆向
  7. VC++ HIDAPI实现USB数据读写
  8. NOI2018退役记
  9. linux zip压缩比1000,linux下压缩工具总结与使用(参考私房菜)
  10. Django深入模板引擎
  11. 【游戏开发创新】自学Blender建模,自制孔明灯,在Unity中点亮整个星空,愿新年,胜旧年(Unity | 建模 | 粒子系统 | 预设)
  12. [渝粤教育] 四川轻化工大学 化工设备机械基础 参考 资料
  13. Blend for Visual Studio 概述
  14. 51单片机-PWM调速(直流电机,智能小车的电机调速)
  15. JS实现点击按钮图片左右切换、点击图片按钮出现下拉菜单
  16. Java程序员之从菜鸟到职场高手的必看...
  17. 67. 把字符串转换成整数
  18. Unity优化之Graphics相关
  19. WebDAV之葫芦儿·派盘+纯纯写作
  20. 私有部署、重构企业软件,第四范式发布大模型“式说”

热门文章

  1. <Android开发> Android系统开发-GNSS流程分析及实现
  2. 数码相机与手机相机成像差别
  3. 2022电子邮箱大全,国内企业邮箱注册大全有哪些?
  4. 华3C交换机调试基本
  5. 手机WIFI传文件到局域网服务器,局域网内手机和电脑怎么实现无线传输文件?
  6. nmap下载及安装过程。
  7. 南怀瑾:秘方集(治高血压、失眠、肺病、肠胃病、近视、伏淫欲还精补脑、保健长寿)
  8. 能让你脱颖而出的简历应该这么写
  9. 软件测试背景对渗透测试有用吗,软件测试与渗透测试那个工作有前途
  10. 游戏策划笔记:交互分析