开发中向服务器请求到的数据是特别复杂的,需要从中抽离出需要展示的数据进行展示个和交互。

思路:

先将请求到的复杂数据传递到一个类A中,从类A里抽离出需要的数据。需要展示数据的地方,面向类A开发,类A关心数据抽离问题,不关心如何展示,只管提供所需要的数据。

页面关心展示数据问题,不关心数据问题,只管和类A要数据。

实现:

目录结构:

src  > network > request.js

         > detail.js

  > detail.vue

detail.vue向detail.js要需要展示的数据,detail.js请求数据,并从复杂数据中抽离出detail.vue所需要的数据。

代码:

  1. <template>
  2. <div id= "detail">
  3. // 展示数据
  4.  
  5. </div>
  6. </template>
  7.  
  8. <script>
  9.  
  10. import {getDetail, Goods,Shop,GoodsParam,getRecommend} from 'network/detail'
  11.  
  12. export default {
  13. name: "Detail",
  14.  
  15. data() {
  16. return {
  17. iid: null,
  18. topImages: [],
  19. goods: {},
  20. shop:{},
  21. detailInfo:{},
  22. paramInfo:{},
  23. commentInfo:{},
  24. recommends: [],
  25. itemImgListener:null,
  26. }
  27. },
  28.  
  29. created() {
  30. // 1. 保存传入的iid
  31. console.log("bb",this.$route.params)
  32. this.iid = this.$route.params.iid
  33.  
  34. // 2.根据iid请求详情数据
  35. getDetail(this.iid).then(res => {
  36. console.log(res)
  37. // 1. 轮播图数据
  38. const data = res.result;
  39. this.topImages = data.itemInfo.topImages
  40. // 2.获取商品信息
  41. this.goods = new Goods(data.itemInfo, data.columns, data.shopInfo.services)
  42.  
  43. // 3. 创建店铺信息的对象
  44. this.shop = new Shop(data.shopInfo)
  45.  
  46. // 4. 保存商品的详情数据
  47. this.detailInfo = data.detailInfo;
  48.  
  49. //5. 获取参数信息
  50. this.paramInfo = new GoodsParam(data.itemParams.info, data.itemParams.rule)
  51.  
  52. // 6. 获取评论信息
  53. if (data.rate.cRate !== 0){
  54. this.commentInfo = data.rate.list[0]
  55. }
  56.  
  57. // 7.请求推荐数据
  58. getRecommend().then(res => {
  59. console.log('详细页面的商品推荐数据',res)
  60. this.recommends = res.data.list
  61. })
  62. },
  63. </script>

detail.vue

  1. import axios from "axios"
  2.  
  3. // 推荐写法,因为axios返回的就是promise对象,没必要在封装一次promise
  4. // 如果换axios框架,只需本页去掉axios相关,导入最新框架,return new Promise()就可以,其他文件依旧正常使用
  5. export function request(config) {
  6. const instance = axios.create({
  7. // baseURL: 'http://123.207.32.32:8000/api/hy',
  8. baseURL: 'http://106.54.54.237:8000/api/hy',
  9. timeout: 5000
  10. });
  11.  
  12. // 2.2 响应拦截
  13. instance.interceptors.response.use(res =>{
  14. // console.log('响应拦截');
  15. // console.log(res.data);
  16. return res.data
  17. },err =>{
  18. console.log('拦截服务器响应错误')
  19. console.log(err)
  20. })
  21.  
  22. // 发送网络请求
  23. return instance(config)
  24. }

request.js

  1. import {request} from './request'
  2.  
  3. export function getDetail(iid){
  4. return request({
  5. url: "/detail",
  6. params: {
  7. iid
  8. }
  9. })
  10. }
  11.  
  12. export class Goods{
  13. constructor(itemInfo, columns, services){
  14. this.title = itemInfo.title;
  15. this.desc = itemInfo.desc;
  16. this.newPrice = itemInfo.price;
  17. this.oldPrice = itemInfo.oldPrice;
  18. this.discount = itemInfo.discountDesc;
  19. this.columns = columns;
  20. this.services = services;
  21. this.realPrice = itemInfo.lowNowPrice;
  22. }
  23. }
  24.  
  25. export class Shop{
  26. constructor(shopInfo){
  27. this.logo = shopInfo.shopLogo;
  28. this.name = shopInfo.name;
  29. this.fans = shopInfo.cFans;
  30. this.sells = shopInfo.cSell;
  31. this.score = shopInfo.score;
  32. this.goodsCount = shopInfo.cGoods;
  33. }
  34. }
  35.  
  36. export class GoodsParam {
  37. constructor(info, rule) {
  38. // 注: images可能没有值(某些商品有值, 某些没有值)
  39. this.image = info.images ? info.images[0] : '';
  40. this.infos = info.set;
  41. this.sizes = rule.tables;
  42. }
  43. }
  44.  
  45. export function getRecommend(){
  46. return request({
  47. url: '/recommend'
  48. })
  49. }

detail.js

web开发网络请求到数据的整合办法的更多相关文章

  1. Android网络请求与数据解析,使用Gson和GsonFormat解析复杂Json数据

    版权声明:未经博主允许不得转载 一:简介 [达叔有道]软件技术人员,时代作者,从 Android 到全栈之路,我相信你也可以!阅读他的文章,会上瘾!You and me, we are family ...

  2. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  3. Flutter网络请求和数据解析

    一:前言 - 什么是反射机制,Flutter为什么禁用反射机制? 在Flutter中它的网络请求和数据解析稍微的比较麻烦一点,因为Flutter不支持反射机制.相信大家都看到这么一条,就是Flutte ...

  4. Android之三种网络请求解析数据(最佳案例)

    AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...

  5. ASP.NET Web API 记录请求响应数据到日志的一个方法

    原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个 ...

  6. (转载)Android之三种网络请求解析数据(最佳案例)

    [置顶] Android之三种网络请求解析数据(最佳案例) 2016-07-25 18:02 4725人阅读 评论(0) 收藏 举报  分类: Gson.Gson解析(1)  版权声明:本文为博主原创 ...

  7. iOS开发网络请求——大文件的多线程断点下载

    iOS开发中网络请求技术已经是移动app必备技术,而网络中文件传输就是其中重点了.网络文件传输对移动客户端而言主要分为文件的上传和下载.作为开发者从技术角度会将文件分为小文件和大文件.小文件因为文件大 ...

  8. iOS开发网络篇—XML数据的解析

     iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...

  9. Solon Web 开发,五、数据访问、事务与缓存应用

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

随机推荐

  1. centOS 开启服务器后无法访问(大坑啊)

    在开启了nodejs后,发现虽然ssh访问到主机,但是公网不能访问. 一番调试发现程序是正常的,也确实在监听着端口.折腾良久无果,在Vultr上发帖求助.几分钟后Vultr团队的工程师Joshua B ...

  2. Codeforces1157A(A题)Reachable Numbers

    A. Reachable Numbers Let's denote a function f(x)f(x) in such a way: we add 11 to xx, then, while th ...

  3. Django之AJAX简单使用

    AJAX简介: AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步的Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

  4. day03: copy的总结(20170215)

    import copynames = ["88xiaoming","liuhai","杨东","liuhai",&quo ...

  5. 王艳 201771010127《面向对象程序设计(java)》第九周学习总结

    实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 一 ...

  6. Unity实现byte[]合成图像

    bool CreateCovers(byte[] imageData) { Texture2D imageTexture = new Texture2D(273, 126); imageTexture ...

  7. centos的安装

    直接给大家截图说明吧,简洁明了. 休闲吃瓜时光 选择语言  这边看个人  当然推荐英语 设置root密码 将自己要设置的信息填写进去即可 然后又是休闲吃瓜时光..... 下来登录即可 然后可以看到 这 ...

  8. C#网络编程入门之UDP

    目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...

  9. [SD.TEAM语录]AC语录

    决定做了就要马上去做,不要有任何犹豫     本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士) 转载自[宝宝巴士SuperDo团队] 原文链接: http:// ...

  10. Java的基本数据类型及其封装类

    Java的基本数据类型及其封装类 一.8种基本数据类型 二.基本数据类型的包装类及大小 三.基本数据类型和封装类的区别 定义不同.封装类是对象,基本数据类型不是: 使用方式不同.封装类需要先new初始 ...