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

思路:

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

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

实现:

目录结构:

src  > network > request.js

         > detail.js

  > detail.vue

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

代码:

<template>
<div id= "detail">
// 展示数据 </div>
</template> <script> import {getDetail, Goods,Shop,GoodsParam,getRecommend} from 'network/detail' export default {
name: "Detail", data() {
return {
iid: null,
topImages: [],
goods: {},
shop:{},
detailInfo:{},
paramInfo:{},
commentInfo:{},
recommends: [],
itemImgListener:null,
}
}, created() {
// 1. 保存传入的iid
console.log("bb",this.$route.params)
this.iid = this.$route.params.iid // 2.根据iid请求详情数据
getDetail(this.iid).then(res => {
console.log(res)
// 1. 轮播图数据
const data = res.result;
this.topImages = data.itemInfo.topImages
// 2.获取商品信息
this.goods = new Goods(data.itemInfo, data.columns, data.shopInfo.services) // 3. 创建店铺信息的对象
this.shop = new Shop(data.shopInfo) // 4. 保存商品的详情数据
this.detailInfo = data.detailInfo; //5. 获取参数信息
this.paramInfo = new GoodsParam(data.itemParams.info, data.itemParams.rule) // 6. 获取评论信息
if (data.rate.cRate !== 0){
this.commentInfo = data.rate.list[0]
} // 7.请求推荐数据
getRecommend().then(res => {
console.log('详细页面的商品推荐数据',res)
this.recommends = res.data.list
})
},
</script>

detail.vue

import axios from "axios"

// 推荐写法,因为axios返回的就是promise对象,没必要在封装一次promise
// 如果换axios框架,只需本页去掉axios相关,导入最新框架,return new Promise()就可以,其他文件依旧正常使用
export function request(config) {
const instance = axios.create({
// baseURL: 'http://123.207.32.32:8000/api/hy',
baseURL: 'http://106.54.54.237:8000/api/hy',
timeout: 5000
}); // 2.2 响应拦截
instance.interceptors.response.use(res =>{
// console.log('响应拦截');
// console.log(res.data);
return res.data
},err =>{
console.log('拦截服务器响应错误')
console.log(err)
}) // 发送网络请求
return instance(config)
}

request.js

import {request} from './request'

export function getDetail(iid){
return request({
url: "/detail",
params: {
iid
}
})
} export class Goods{
constructor(itemInfo, columns, services){
this.title = itemInfo.title;
this.desc = itemInfo.desc;
this.newPrice = itemInfo.price;
this.oldPrice = itemInfo.oldPrice;
this.discount = itemInfo.discountDesc;
this.columns = columns;
this.services = services;
this.realPrice = itemInfo.lowNowPrice;
}
} export class Shop{
constructor(shopInfo){
this.logo = shopInfo.shopLogo;
this.name = shopInfo.name;
this.fans = shopInfo.cFans;
this.sells = shopInfo.cSell;
this.score = shopInfo.score;
this.goodsCount = shopInfo.cGoods;
}
} export class GoodsParam {
constructor(info, rule) {
// 注: images可能没有值(某些商品有值, 某些没有值)
this.image = info.images ? info.images[0] : '';
this.infos = info.set;
this.sizes = rule.tables;
}
} export function getRecommend(){
return request({
url: '/recommend'
})
}

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. @vue/cli 4.0+express 前后端分离实践

    之前总结过一篇vue-cli 2.x+express+json-server实现前后端分离的帖子,@vue/cli3.0及4.0搭建的项目与vue-cli2.x的项目结构有很大的不同.这里对@vue/ ...

  2. MCP3421使用详解

    0 摘要 因某项目需要,需要采集微弱的电压信号,且对电压精度要求较高,于是选中MCP3421这款18 bit 高精度IIC AD转换芯片.本文将结合MCP3421的手册,对该芯片的使用进行详细解释,并 ...

  3. Json转化与ExtJS树(后台处理)

    一.JSON对格式化数据的操作: 1.导入依赖包: import org.json.JSONArray; import org.json.JSONException; import org.json. ...

  4. BitArray虽好,但请不要滥用,又一次线上内存暴增排查

    一:背景 1. 讲故事 前天写了一篇大内存排查在园子里挺火,这是做自媒体最开心的事拉,干脆再来一篇满足大家胃口,上个月我写了一篇博客提到过使用bitmap对原来的List<CustomerID& ...

  5. 换个角度学习ASP.NET Core中间件

    中间件真面目 关于ASP.NET Core中间件是啥,简单一句话描述就是:用来处理HTTP请求和响应的一段逻辑,并且可以决定是否把请求传递到管道中的下一个中间件! 上面只是概念上的一种文字描述,那问题 ...

  6. 花费一周刷完两份面试pdf(含答案)轻松拿下了抖音、头条、京东、小米等大厂的offer,成功度过程序员的寒冬。

    整理出一篇Java进阶架构师之路的核心知识,同时也是面试时面试官必问的知识点,篇章也是包括了很多知识点,其中包括了有基础知识.Java集合.JVM.多线程并发.spring原理.微服务.Netty 与 ...

  7. Unity自定义Log

    有如下两种方式,第一种借助了Unity自身的LogType枚举型:第二种则是纯粹地自己定义: public class Log { public Log(string message, UnityEn ...

  8. Java学习之路【第一篇】:前言

    Java 语言概述 一.什么是Java语言 Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级的编程语言.所谓编程语言,是计算机的语言,人们 ...

  9. Mysql面试的技术名词

    面试的技术名词 面试一般会遇到一些名词,其实可能自己都知道其中的道理,但是因为没了解过,当时心里就一句WC,然后弱弱答一句:不好意思这个我只是听过,具体还没了解过: 回表 覆盖索引 最左前缀匹配 索引 ...

  10. word dde payload

    payload: ctrl+F9 {DDEAUTO c:\\windows\\system32\\cmd.exe "/k calc.exe" } Since this techni ...