頔言頔语:进步,一定要进步,进步是跟收入持平的本钱。

01 商品列表

0101 路由配置和数据请求

0102 上拉加载更多

02 商品详情

0201 详情数据请求和展示

0202 轮播图组件提取

0203 商品详情(路由的本质理解)

01 商品列表

0101 路由配置和数据请求

{title:'商品展示',className:'back-goods',route:{name:'GoodsShow',params:{page:1} } }

路由配置信息

{path:'/goods/list/:page',name:'GoodsShow',component:GoodsShow }

在created()当中发起请求

created() {this.$axios.get('goods/getshopcarlist/88,89').then(res=>{console.log(res)}).catch(console.log)// 获取页码// let { page } = this.$route.params;this.loadGoodsByPage();}

得到的数据格式如下

然后进行页面的渲染即可

0102 上拉加载更多

当我们上拉加载更多的时候,会继续请求数据并且完成数据的拼接

loadBottom() {this.loadGoodsByPage();// 通知状态改变this.$refs.loadmore.onBottomLoaded();
}

在这里需要完成一个赋值和追加的判断

if (this.page === 1) {this.goodsList = res.data.message;}
else {this.goodsList = this.goodsList.concat(res.data.message);}

当我们翻页后拿到的数据不足10条,说明已经是最后一页了。后续不能在进行上拉操作

 if (length < 10) {this.$toast('没有更多数据了');
this.allLoaded = true;
}

此时遇见一个bug,我们没有定义父容器高度,所以在刚开始的时候就会触发上拉检测机制。

进入上拉检测机制的判定条件是:可视高度+卷进去的高度 = 总长度

所以我们需要动态检测父亲容器的高度

 mounted() {// 父容器高度(可视) = 设备高度 - 父容器的topthis.wrapperHeight =
document.documentElement.clientHeight
- this.$refs.wrapper.getBoundingClientRect().top;
}

并且将wrapperHeight作为高度值绑定在父元素的上

<div :style="{ height:wrapperHeight + 'px' }" ref="wrapper">
</div>

02 商品详情

0201 详情数据请求和展示

在商品详情页面,我们需要请求商品轮播图还有商品信息像两个数据,若是有一个数据请求失败,则判定数据请求失败

这个时候需要使用 $axios.all([]).then(传播响应).catch()进行合并请求

 created() {// 商品轮播图 getthumimages/:imgid// 商品信息 goods/getinfo/:goodsidlet imgReq = this.$axios.get(`getthumimages/${this.goodsId}`);let infoReq = this.$axios.get(`goods/getinfo/${this.goodsId}`);this.$axios.all([imgReq,infoReq]).then(this.$axios.spread((imgRes,infoRes)=>{this.imgs = imgRes.data.message;this.info = infoRes.data.message[0];})).catch(console.log)
}

数据请求成功进行传播响应。使用this.$axios.spread( ),在传播响应的时候,将拿到的两个结果保存在我们data当中

拿到的数据格式如下所示:

0202 轮播图组件提取

轮播图部分考虑到和Home组建的轮播图相似,所以我们进行组件提取

组件提取的步骤:

  • 01. 样式是否一样
  • 02. 轮播图请求的URL是否一致
  • 03. 响应回来的数据是否一致

Home组件部分和商品详情部分的数据发送请求还响应回来的数据格式稍有不同,需要对代码进行健壮性调整:

01. 响应回来的图片数据的url部分不同

<img :src="item.img||item.src" alt="">

02. 因为轮播图请求的URL也不同

所以url采用父组件传递的方式

<my-swipe url="getlunbo" />

0203 商品详情(路由的本质理解)

我们发现,商品图文介绍和新闻详情的页面是一致的,当我们不想将图文介绍提取出来成为一个全局组件,可以在跳转的时候直接跳转到新闻详情页面

这个时候就必须看看路由跳转的详细流程了

goGoodsInfo() {// 直接进入到新闻详情
this.$router.push({name:'NewsDetail',params:{id:this.$route.query.id}
});
},

所以此时的新闻详情不仅要显示新闻详情,还需要显示商品详情信息

素以新闻详情的页面需要进行传递过来的参数的判定

这个参数在局部路由钩子里进行

beforeRouteEnter (to, from, next) {let title = '详情';// 1: 判断from是新闻列表,还是商品详情if (from.name === 'NewsList') {title = '新闻详情'; }
else if (from.name === 'GoodsDetail') {title = '商品图文信息' }// 这里没有this,因为组件还没有被实例化next(vm => {// 通过 `vm` 访问组件实例 就是这里未来的thisvm.myTitle = title;});}

但是注意此时还没有this,所以需要通过next()函数传递过来一个vm进行数据的传递

在商品详情被点击的时候,跳转到商品图文详情页面, 为了确定是那个商品,我们传进来一个商品的ID过来。

goGoodsInfo() {// 直接进入到新闻详情this.$router.push({name:'NewsDetail',params:{id:this.$route.query.id }});
}

关于这个项目的首页,这是我想分享给你们的

我的知识和文字不成熟,项目也不成熟,但是我在进步!

若有意见,欢迎留言指正 !!!

ios图文详情加载html_前端项目009 Vue 信息分享系统 商品列表、详情相关推荐

  1. uni-app 小程序项目三 1. 商品列表、过滤器、封装商品item组件、上拉加载、节流阀、下拉刷新、2. 商品详情、轮播图、商品价格闪烁问题 3.加入购物车、vuex、持久化存储、mixiins

    1.0 创建 goodslist 分支 1.1 定义请求参数对象 为了方便发起请求获取商品列表的数据,我们要根据接口的要求,事先定义一个请求参数对象: data() {return {// 请求参数对 ...

  2. iOS原生如何加载HTML中img标签的图片

    原文出自:iOS原生如何加载HTML中img标签的图片 前言 最近iOS App项目中使用Webview加载H5页面比较多,也有不少朋友经常问到这个问题,在这里我也学习学习如何通过iOS原生的方式来加 ...

  3. CGContextRef绘图-iOS球形波浪加载进度控件-HcdProcessView详解

    简书也有发布:http://www.jianshu.com/p/20d7... <iOS球形波浪加载进度控件-HcdProcessView>这篇文章已经展示了我在项目中编写的一个球形进度加 ...

  4. ios html异步加载图片,iOS 异步加载本地图片

    iOS 异步加载本地图片 问题 当某个界面使用系统API + (nullable UIImage *)imageNamed:(NSString *)name;加载了过多本地图片资源时,不可避免的会产生 ...

  5. android隐私违规获取问题处理 及 Hook拦截处理记录 (VirtualXposted/epic等)及 android/iOS 多bundle加载方式修复方案

    文章目录 1.如何检测/复现 android_id/Mac地址等权限被超前获取 ```但是,检测机构是如何检测我们的APP?``` 关于hooklogin插件 太极 ---- 以上基础工作完成---- ...

  6. 无法加载具有重复项目项的项目: pathstroke.cpp 作为 ClCompile 且作为 None 项类型包括在其中。

    右击无法加载的那个项目,选择 "编辑 <projectName>.vcxproj", 查找到重复的一行(在此项目中如错误信息所报,重复加载了一个名为pathstroke ...

  7. ios加载本地html懒加载图片方案,IOS开发中加载大量网络图片优化方法

    IOS开发中加载大量网络图片如何优化 1.概述 在IOS下通过URL读一张网络图片并不像其他编程语言那样可以直接把图片路径放到图片路径的位置就ok,而是需要我们通过一段类似流的方式去加载网络图片,接着 ...

  8. Qt同时加载多个项目

    Qt同时加载多个项目 如何将多个项目使用一个.pro文件启动起来? 新建一个.pro文件,加入如下几行: TEMPLATE = subdirs SUBDIRS += ComboBox/ComboBox ...

  9. 【iOS】—— 懒加载

    懒加载 首先,要明白懒加载的概念,懒加载的实质就是延迟加载,iOS设备在加载时有限度,如果我们的数据很大,一次性将其全部加载出来可能对内存的损耗比较大,懒加载的作用就是将其在需要的时候再加载出来. 懒 ...

最新文章

  1. [Node] 重要外部模块
  2. python之celery简单使用
  3. php排除无效字查询,php删除无效的字符
  4. 视音频数据处理入门:AAC音频码流解析
  5. 小白开学Asp.Net Core 《七》
  6. 数组insert_算法题——[leetcode1675]最小化数组差
  7. mysql 函数无法访问_mysql 中出现:不能打开到主机的连接,在端口3306: 连接失败...
  8. C# 6.0 的那些事
  9. Tensor的索引与切片
  10. python爬携程_Python crawler:对携程的航班数据进行抓取,python,爬虫,爬取
  11. 程序员也要学英语——动词相关合集
  12. 大数据给人们生活带来的改变_大数据给我们的生活带来了哪些改变?
  13. cdr 2021 卸载
  14. 简洁明了的深度优先遍历算法
  15. mac上chrome插件安装
  16. Exploring the Regularity of Sparse Structure in Convolutional Neural Networks(在卷积神经网络中探索稀疏结构的规律性)
  17. html根据PC手机设置不同背景图,Html-根据不同的分辨率设置不同的背景图片
  18. C语言/C++基础之绘制图钉画(附源码)
  19. 树莓派3B+安装Raspbian简易教程
  20. redhat linux之bash 编程

热门文章

  1. Jsoup获取所有链接
  2. mono for android mysql_mono for android 自定义titleBar Actionbar 顶部导航栏 修改 样式 学习...
  3. swiper鼠标hover停止自动轮播_swiper滑块组件
  4. java记录pv,计算500万PV/每天的网站
  5. 水平方向的算子检测竖直边缘理解
  6. 【Jmeter篇】jmeter Ant Jenkins接口自动化测试集成之半路逆转(二)
  7. fiddler抓包工具配置详解
  8. 【文章】一副对联,便写尽了人生
  9. 算法提高 合并石子【动态规划】
  10. Delphi---TServerSocket和TClientSocket发送和接收大数据包