vue小程序开发(四)首页 推荐

  • 编写 首页-推荐 模块
  • 推荐-最顶部模块
  • 推荐-月份模块
    • 月份模块标题样式
  • 推荐-热门模块
    • 基本布局
    • 使用scroll-view改造容器
      • 分页功能分析
    • 实现头部固定
    • 分页
    • 实现底部触发
  • 首页 - 专辑
    • 功能分析
    • 轮播图实现
    • 列表数据渲染
  • 接口文档
  • 出错
    • net::ERR_PROXY_CONNECTION_FAILED

编写 首页-推荐 模块

功能介绍

  • 接口文档
  • 数据动态渲染
  • moment.js 的使用
  • “热门”列表的基于scroll-view的分页加载

在组件中能用生命周期组件没有太多,使用mouted(){}

推荐-最顶部模块

接口调用(新)

url:"http://service.picasso.adesk.com/v3/homepage/vertical",
data:{limit:30,order:"hot",skip:0
}

接口调用结果

home-recommend/index.vue

<template>
<view><!-- 推荐 开始 --><view class="recommend_wrap"><view class="recommend_item" v-for="item in recommends":key="item.id"><image :src="item.thumb"></image></view></view><!-- 推荐 结束 --></view></template><script>export default {data(){return{//推荐列表recommends:[]}},mounted(){this.request({url:"http://service.picasso.adesk.com/v3/homepage/vertical",data:{limit:30,order:"hot",skip:0}}).then(result=>{console.log(result);this.recommends=result.res.homepage[1].items;})}}
</script><style></style>

结果

home-recommend/index.vue

<template>
<view><!-- 推荐 开始 --><view class="recommend_wrap"><view class="recommend_item" v-for="item in recommends":key="item.id"><image  mode="widthFix" :src="item.thumb"></image></view></view><!-- 推荐 结束 --></view></template><script>export default {data(){return{//推荐列表recommends:[]}},mounted(){this.request({url:"http://service.picasso.adesk.com/v3/homepage/vertical",data:{limit:30,order:"hot",skip:0}}).then(result=>{console.log(result);this.recommends=result.res.homepage[1].items;})}}
</script><style lang="scss" scoped>.recommend_wrap{//flex布局display:flex;flex-wrap: wrap;.recommend_item{width: 50%;border: 5rpx solid #fff;}}</style>

mode=“widthFix” 图片高度自适应 》》 知识点隶属于微信小程序基础

css 中的 flex 布局需要掌握,排版一般都会用到

结果

推荐-月份模块

月份模块标题样式

省略了上方四张图片的相关代码

home-recommend/index.vue

<template>
<view><!-- 月份开始 --><view class="moneths_wrap"><view class="moneths_title"><view class="moneths_title_info"><view class="moneths_info"><text>18 /</text>01 月</view><view class="moneths_text">你负责美丽就好</view></view><view class="moneths_title_more">更多 > </view></view><view class="moneths_content"></view></view><!-- 月份结束 -->
</view>
</template><style lang="scss" scoped>.moneths_wrap {.moneths_title {display: flex;//   space 属性作用就是左边一块 右边一块justify-content: space-between;padding:20rpx;.moneths_title_info {color:$color;font-size:30rpx;font-weight: 600;// 使得两行 变成 一行display: flex;.moneths_info {text{font-size: 36rpx;}}.moneths_text {font-size: 34rpx;color:#666;margin-left: 30rpx;}}.moneths_title_more {font-size: 24rpx;color:$color;}}.moneths_content {}}
</style>

效果

选中代码块 快捷键ctrl+shift+p 显示插件提示框,选择generate css tress即可

快捷键 ctrl + D 选中view 删除所有的view

src/uni.scss

$color:#d52a7e;
npm install moment

http://momentjs.cn/

月份格式输出

<template><view><!-- 月份开始 --><view class="moneths_wrap"><view class="moneths_title"><view class="moneths_title_info"><view class="moneths_info"><text>{{monthes.DD}} /</text>{{monthes.MM}} 月</view><view class="moneths_text">{{monthes.title}}</view></view><view class="moneths_title_more">更多 > </view></view><view class="moneths_content"></view></view><!-- 月份结束 --></view>
</template>
<script>
//导入 moment.js
import moment from "moment";
export default {data() {return {//推荐列表recommends: [],//月份  对象monthes: {}};},mounted() {this.request({url: "http://service.picasso.adesk.com/v3/homepage/vertical",data: {limit: 30,order: "hot",skip: 0},}).then((result) => {console.log(result);//推荐模块this.recommends = result.res.homepage[1].items;//月份模块this.monthes = result.res.homepage[2];//将时间戳 改成 18号/月 moment.jsthis.monthes.MM = moment(this.monthes.stime).format("MM");this.monthes.DD = moment(this.monthes.stime).format("DD");console.log(this.monthes);});},
};
</script>

大图变缩略图

图片渲染

image标签中的mode

aspectFit 等比例拉伸

aspectFill 填满

优化月份模块

问题

当请求未返回时显示undefined,优化便是解决这个问题

做判断

快捷键 替换代码

ctrl + h

推荐-热门模块

基本布局

response数据格式:

代码:

home-recommend/index.vue

<template><view v-if="recommends.length > 0"><!-- 热门 开始 --><view class="hots_wrap"><view class="hots_title"><text>热门</text></view><view class="hots_content"><view class="hot_item" v-for="item in hots" :key="item.id"><image mode="widthFix" :src="item.thumb"></image></view></view></view><!-- 热门 结束 --></view>
</template>
<script>
import moment from "moment";
export default {data() {return {// 热门hots: [],};},mounted() {this.request({url: "http://service.picasso.adesk.com/v3/homepage/vertical",data: {limit: 30,order: "hot",skip: 0,},}).then((result) => {//获取热门数据的列表this.hots = result.res.vertical;});},
};
</script>
<style>.hots_wrap {.hots_title {padding: 20rpx;text {border-left:10rpx solid $color;padding-left: 20rpx;font-size: 34rpx;font-weight: 600;}}.hots_content {display: flex;flex-wrap: wrap;.hot_item {width: 33.33%;border: 3rpx solid #fff;image {}}}}
</style>

使用scroll-view改造容器

分页功能分析

  • 使用 scroll-view 标签充当分页的容器(小程序内置标签
  • 绑定滚动条触底时间 scrolltolower
  • 实现分页逻辑

实现头部固定

目前效果:

目标效果:

需要实现头部固定变不变

思路:

给容器定个高度,应该是整个屏幕的高➖头部的高,底部的bar不用管,因为小程序把底部剔除出来了

过程:

  1. 将根标签改成scroll-view,加入scroll-y表示上下滑动

  1. 固定上方头部

注意 - 号左右有空格键

100vh 代表整个屏幕的高度,此处忽略底部bar

分页

分页主要参数:

skip : 跳过多少条

  • 当我们请求第一页的时候,跳过0条
  • 当请求第二页的时候,需要跳过30条
  • 当请求第三页数据时,需要跳过60条

提取出来 ,方便改动

data() {return {//推荐列表recommends: [],//月份  对象monthes: {},// 热门hots: [],//请求的参数params: {limit: 30,order: "hot",skip: 0,},//是否还有下一页hasMore: true,};
}

实现底部触发

底部触发函数 handleToLower

@scrolltolower="handleToLower"

hasMore:表示是否还有数据

getList():封装了请求

handleToLower() {/*** 1 修改参数 skip += limit* 2 重新发送请求 getList()* 3 请求回来成功 hots 数据的叠加*/if (this.hasMore) {this.params.skip += this.params.limit;this.getList();} else {//弹窗提示用户uni.showToast({title: "已经没图片啦",duration: 2000,});}
},

getList()

获得接口的数据

经过调试,发现视频中 length的方法并不能判断是否有图片数据

通过数据观察,发现当没有数据的时候,接口中code的返回值为1,有数据的时候,接口的code的返回值为0

拼接热门数据(es6):this.hots = […this.hots, …result.res.vertical];

//获取接口的数据
getList() {this.request({url: "http://service.picasso.adesk.com/v3/homepage/vertical",data: this.params,}).then((result) => {console.log(result);//判断还有没有下一页数据if (result.code === 1) {this.hasMore = false;return;}//第一次发请求的时候if (this.recommends.length === 0) {//推荐模块this.recommends = result.res.homepage[1].items;//月份模块this.monthes = result.res.homepage[2];//将时间戳 改成 18号/月 moment.jsthis.monthes.MM = moment(this.monthes.stime).format("MM");this.monthes.DD = moment(this.monthes.stime).format("DD");console.log(this.monthes);}//获取热门数据的列表//改成数组拼接的方式 es6this.hots = [...this.hots, ...result.res.vertical];});
}

首页 - 专辑

功能分析

  • 使用 setNavigationBarTitle 修改 页面标题
  • 发送请求获取数据
  • 使用 swiper 轮播图组件
  • 使用 scroll-view 组件实现分页
  • 点击跳转到 专辑详情页

setNavigationBarTitle

在组件中动态修改主题

动态修改页面标题

home-album/index.vue

mounted() {//修改页面标题uni.setNavigationBarTitle({title:"专辑"});
}

专辑接口

http://service.picasso.adesk.com/v1/wallpaper/album

轮播图实现

<template><view><!-- swiper1 自动轮播 autoplay2 指示器  indicator-dots3 衔接轮播 circular4 swiper 默认高度 150px5 image默认的宽度 320px =》 基本样式中 重置了 100%默认高度 240px6 计算图片的宽度和高度的比例7 把图片的比例也写到 swiper标签样式8 默认宽高 100%--><!-- 轮播图 开始 --><!-- 轮播图结束 --><view class="album_swiper"><swiperautoplayindicator-dotscircular><swiper-itemv-for="item in banner":key="item.id"><image :src="item.thumb"></image></swiper-item></swiper></view></view>
</template>
<script>export default {data(){return{params:{limit:30,order:"new",skip:0},//轮播图数组banner:[],//列表数组album:[]}
}
,mounted() {//修改页面标题uni.setNavigationBarTitle({title:"专辑"});this.getList();},methods:{//获取接口的数据getList(){this.request({url:"http://service.picasso.adesk.com/v1/wallpaper/album",data:this.params}).then(result=>{console.log(result);this.banner = result.res.banner;this.album = result.res.album;})}}
};
</script>
<style lang="scss" scoped>
.album_swiper{swiper{//750rpxheight: calc( 750rpx / 2.3);image{height: 100%;}}
}
</style>

列表数据渲染

接口文档

P29

https://www.jianshu.com/p/fb1d1ad58a0b

https://www.showdoc.cc/414855720281749?page_id=3678621017219602

接口文档
推荐: http://service.picasso.adesk.com/v3/homepage/vertical
专辑 http://service.picasso.adesk.com/v1/wallpaper/album
分类: http://service.picasso.adesk.com/v1/vertical/category
分类-最新-热门 http://service.picasso.adesk.com/v1/vertical/category/i d / v e r t i c a l 专 辑 h t t p : / / s e r v i c e . p i c a s s o . a d e s k . c o m / v 1 / w a l l p a p e r / a l b u m 专 辑 − 详 情 h t t p : / / s e r v i c e . p i c a s s o . a d e s k . c o m / v 1 / w a l l p a p e r / a l b u m / {id}/vertical 专辑 http://service.picasso.adesk.com/v1/wallpaper/album 专辑-详情 http://service.picasso.adesk.com/v1/wallpaper/album/id/vertical专辑http://service.picasso.adesk.com/v1/wallpaper/album专辑−详情http://service.picasso.adesk.com/v1/wallpaper/album/{id}/wallpaper
图片评论 http://service.picasso.adesk.com/v2/wallpaper/wallpaper/${id}/comment

出错

net::ERR_PROXY_CONNECTION_FAILED

当处理一个错误超过一个小时,且错误不在代码在环境,可以重新构建环境,而不是一直找错!

vue小程序开发(四)首页 推荐相关推荐

  1. vue小程序开发(一) uni-app基本学习

    vue小程序开发(一) uni-app基本学习 脚手架搭建项目 新建页面 样式和sass 基本语法 数据展示 数据循环 条件编译 计算属性 事件 传参方式 组件 组件的简单使用 示例 组件传递参数 父 ...

  2. 微信小程序怎么在wxml中插入多个图片_兰州小程序开发流程费用推荐品牌_便企网...

    兰州小程序开发流程费用推荐品牌,有人说既然开发文档这么详细那直接跟着开发文档来学习就可以轻松入门,你有这份自信是非常好的,也希望你有很强的学习能力,但对于很多的普通人新手来说(当然也包括我),做作品的 ...

  3. 微信小程序开发的首页设置

    在我们微信小程序开发的时候,页面切换十分麻烦,这个时候你可以设置打开软件时默认显示的页面,设置十分简单 第一种方法:在app.json中的pages选项中: 这样就设置首页是Index, 第二种方法就 ...

  4. 有哪些好的上门洗车小程序开发公司可以推荐?

    ​想找上门洗车软件开发公司不知道怎么选? 看完以下几点帮你找到靠谱的上门洗车软件开发公司! 一般开发公司都会有案例展示,可以先看有没有上门洗车行业的案例,有的话后续开发可以在现有案例的功能基础上拓展, ...

  5. 小程序开发(首页设计)

    首页分为4个模块 搜索 输入歌曲名称,进入搜索页面 轮播 推荐一些歌曲信息之类的 导航 跳转到社区,个人中心,排行榜的位置 歌单推荐 选取部分歌单推荐给用户 使用了组件库,仅演示效果,还未添加实际功能

  6. 小程序开发外包公司哪家好?

    如果你想开发高质量的小程序,选择合适的公司进行小程序开发外包是非常重要的.今天教你如何判断一个小程序开发外包公司的质量,并推荐一个简单实用的小程序平台. 一.如何选择小程序开发外包公司? 1.查看是否 ...

  7. 小程序开发工具_有哪些好用的微信小程序开发工具?如何选择?

    小程序对商家和个人的帮助很大,可以为商家导入新的线上流量.那么该如何拥有自己的小程序呢?如果你想自己制作小程序的话,目前有两种方式,一种是使用"微信开发者工具",需要精通代码编程, ...

  8. Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 前后端分离的,一键生成代码和API接口的,通用后台管理系统 快速开发框架,开发小程序和APP的推荐框架!

    Thinkphp 6 + Vue 2 + ElementUI + Vxe-table 前后端分离的,一键生成代码和API接口的,通用后台管理系统 快速开发框架,开发小程序和APP的推荐框架! 概述 R ...

  9. 微信小程序开发前台篇(四)修改首页默认路径

    微信小程序的默认首页 在app.json中的第一个路径就是默认的首页路径 调整前首页路径pages/index/index {"pages": ["pages/index ...

最新文章

  1. 为你的水晶报表装载本地图片
  2. 虚拟化云计算平台Proxmox VE
  3. Android 通过局域网udp广播自动建立socket连接
  4. 推荐一个短小精干的JavaScript对话框
  5. IBASE header change - read access sequence
  6. java平台脚本+java编译器API
  7. python人工智能pdf_800G人工智能学习资料:AI电子书+Python语言入门+教程+机器学习等限时免费领取!...
  8. 【BZOJ5100】[POI2018]Plan metra 构造
  9. Centeros常用命令
  10. linux嵌入式聊天室的程序,基于Linux网络聊天室的设计与实现
  11. mysql5.7导出数据提示–secure-file-priv选项问题的解决方法
  12. 自然语言处理是什么,我们为什么需要处理自然语言?
  13. OSChina 周四乱弹 ——潘金莲告西门庆
  14. apmserv5.2.6 mysql启动失败_APMServ5.2.6win10系统Apache、MySQL5.1启动失败解决办法
  15. Java毕业设计_集美大学诚毅学院校友录系统设计与开发
  16. flash 转换成html5,文档 - FlashReturn.com,转换flash到支持html5的网页上 - 闪归
  17. 三星程序员晒源码泄露机密
  18. Archive of Our Own_开箱用out-of-box Redis序列号生成器 不再写任何代码 你值得拥有
  19. Vuforia Object Scanner
  20. Java的基础语法:变量、运算符、注释、流程控制、数组

热门文章

  1. AI测试|天猫精灵智能音箱测试策略与方法
  2. 剑指offe【31-67】
  3. nested exception is java.sql.SQLException: Data truncated for column 'PassWord' at row 72
  4. 赊了两串冰糖葫芦才写出来的小结
  5. Ventoy多镜像+防毒全能U盘工具箱
  6. 基于DINet的虚拟数字人
  7. 2022R2移动式压力容器充装考题模拟考试平台操作
  8. Android Binder 之 ServiceManager (基于android 12.0/S)
  9. 猴子定律--如何跳出你深陷的棋局看趋势
  10. [DP优化之平行四边形不等式]例题