uniapp实战 —— 猜你喜欢(含滚动触底分页加载)

效果预览

在这里插入图片描述

组件封装

src\components\SUI_Guess.vue

<script setup lang="ts">
import { ref, onMounted } from 'vue'
import type { GuessItem } from '@/types/index'
import { getGuessListAPI } from '@/apis/index'
import type { PageParams } from '@/types/global'// 分页参数 -- Required指定分页参数必传
const pageParams: Required<PageParams> = {page: 1,pageSize: 10,
}// 已结束标记
const finish = ref(false)// 猜你喜欢的数据列表
const GuessList = ref<GuessItem[]>([])// 获取猜你喜欢的数据列表
const getGuessList = async () => {// 已标记为无更多数据时,不再查询if (finish.value === true) {return uni.showToast({ icon: 'none', title: '没有更多数据~' })}// 查询分页数据let res = await getGuessListAPI(pageParams)// 新数据不断累加--数组追加GuessList.value.push(...res.result.items)// 未到最后一页时,页码不断累加if (pageParams.page < res.result.pages) {// 页码累加pageParams.page++} else {// 到达最后一页时,标记为无更多数据finish.value = true}
}// 生命周期-组件挂载成功时执行
onMounted(() => {getGuessList()
})// 对外暴露方法 -- 供父组件调用
defineExpose({getGuessList: getGuessList,
})
</script><template><!-- 猜你喜欢 --><view class="caption"><text class="text">猜你喜欢</text></view><view class="guess"><navigatorclass="guess-item"v-for="(item, index) in GuessList":key="'guess' + index":url="item.url"><image class="image" mode="aspectFill" :src="item.picture"></image><view class="name"> {{ item.name }} </view><view class="price"><text class="small">¥</text><text>{{ item.price }}</text></view></navigator></view><view class="loading-text">{{ finish ? '没有更多数据~' : '正在加载...' }}</view>
</template><style lang="scss">
:host {display: block;
}
/* 分类标题 */
.caption {display: flex;justify-content: center;line-height: 1;padding: 36rpx 0 40rpx;font-size: 32rpx;color: #262626;.text {display: flex;justify-content: center;align-items: center;padding: 0 28rpx 0 30rpx;&::before,&::after {content: '';width: 20rpx;height: 20rpx;background-image: url(@/static/images/bubble.png);background-size: contain;margin: 0 10rpx;}}
}/* 猜你喜欢 */
.guess {display: flex;flex-wrap: wrap;justify-content: space-between;padding: 0 20rpx;.guess-item {width: 345rpx;padding: 24rpx 20rpx 20rpx;margin-bottom: 20rpx;border-radius: 10rpx;overflow: hidden;background-color: #fff;}.image {width: 304rpx;height: 304rpx;}.name {height: 75rpx;margin: 10rpx 0;font-size: 26rpx;color: #262626;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;}.price {line-height: 1;padding-top: 4rpx;color: #cf4444;font-size: 26rpx;}.small {font-size: 80%;}
}
// 加载提示文字
.loading-text {text-align: center;font-size: 28rpx;color: #666;padding: 20rpx 0;
}
</style>

注册为全局组件

src\pages.json
在这里插入图片描述

必要的 TS 类型声明

组件和组件实例类型声明

src\types\component.d.ts

import 'vue'import SUI_Swiper from '@/components/SUI_Swiper.vue'
import SUI_Guess from '@/components/SUI_Guess.vue'
// 组件类型
declare module 'vue' {export interface GlobalComponents {SUI_Guess: typeof SUI_Guess}
}// 组件实例类型
export type SUI_GuessInstance = InstanceType<typeof SUI_Guess>

接口参数和返回值类型声明

src\types\global.d.ts

/** 通用分页参数类型 */
export type PageParams = {/** 页码:默认值为 1 */page?: number/** 页大小:默认值为 10 */pageSize?: number
}/** 通用分页结果类型 */
export type PageResult<T> = {/** 列表数据 */items: T[]/** 总条数 */counts: number/** 当前页数 */page: number/** 总页数 */pages: number/** 每页条数 */pageSize: number
}

业务数据类型声明

src\types\index.d.ts

/** 猜你喜欢 */
export type GuessItem = {/** 商品描述 */desc: string/** 商品折扣 */discount: number/** id */id: string/** 商品名称 */name: string/** 商品已下单数量 */orderNum: number/** 商品图片 */picture: string/** 商品价格 */price: number// 导航地址url: string
}

接口封装

src\apis\index.ts

import { http } from '@/utils/http'
import type { GuessItem } from '@/types/index'
import type { PageParams, PageResult } from '@/types/global'/*** 公共组件-猜你喜欢*/
export const getGuessListAPI = (data?: PageParams) => {return http<PageResult<GuessItem>>({method: 'GET',url: '/home/goods/guessLike',data,})
}

页面使用

src\pages\index\index.vue

  <!-- 中间--自适配高度的滚动区 --><scroll-view class="contentBox" scroll-y @scrolltolower="onScrolltolower"><SUI_Guess ref="guessRef" /></scroll-view>
<style lang="scss">
page {background-color: #f7f7f7;// 总容器高度撑满屏幕height: 100%;// 使容器内元素使用flex布局display: flex;flex-direction: column;
}
.contentBox {// 滚动区自适配高度flex: 1;
}
</style>
import type { SUI_GuessInstance } from '@/types/component'// 获取猜你喜欢组件实例
const guessRef = ref<SUI_GuessInstance>()// 滚动触底事件
const onScrolltolower = () => {guessRef.value?.getGuessList()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用技术 SEO 优化 Pinterest 富图钉

Pinterest 可以影响搜索引擎排名&#xff0c;尤其是谷歌。不过&#xff0c;它的作用方式与其他搜索引擎优化因素不同。这就是 Google 将图钉放在 nofollow 列表中。但是&#xff0c;它们仍然可以作为搜索引擎优化的一个重要因素。 高质量的图钉具有高分辨率的图片、吸引人的内…

(汇川H5U-A8)Modbus Poll与AutoShop使用RS-485通讯

一、初步认识: AutoShop: Modbus Poll: 1、连接配置 ConnectionSerial PortRS-485转串口,所以是串口Serial SettingsCOM3当你插入串口后,会显示新的一个端口,就是这个端口通讯速率9600与PLC协议配置一致数据长度8与PLC协议配置一致奇偶校验位0与PLC协议配置一致停止位2…

用perl解决小朋友问的2的10000次方是多少的问题

2的10000次方是多少&#xff0c;用perl单行命令搞定&#xff0c; perl -Mbigint -le print 2**10000如果是安装了strawberry perl &#xff0c;在Windows控制台上输入&#xff0c;单行命令的单引号要换成双引号。 perl -Mbigint -le "print 2**10000"在git-bash中执…

Linux sed 正则表达式的分组查找和替换

Linux sed 正则表达式的分组查找和替换。 替换IP:PORT信息中的某一段信息&#xff0c;用于IP:端口信息的脱敏。 替换前 cat a01.txt 10.10.32.82:3100 10.10.22.49:21034 10.15.2.246:61501 10.200.18.89:3100 10.200.18.89:21 替换后&#xff08;-E 和 -r 都是EBR扩展模式…

基于LSTM和N-gram序列的英文文本生成(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

echarts图之 底部滚动横轴 缩放图形大小

//折线图-堆叠面积图function pileLineChart(odata, dom){//放大缩小的代码startvar dataZoom [],y240;if(odata.xData.length > 7){dataZoom [{show: true,realtime: true,startValue:0, endValue:5,left:"center",top:"auto",right:"auto"…

SAAS版技术中台必备【智能Print打印】系统

今天给大家介绍一个&#xff0c;全网唯一智能打印系统。 系统特色&#xff1a; 1帮助企业&#xff0c;工业&#xff0c;连接多种打印设备管理&#xff1b; 2.跨系统连接打印设备&#xff0c;进行数据传输 3.打通企业内部所有系统打印功能 4.跨越技术壁垒&#xff1b;使用简…

主食罐头哪个牌子好?猫主食罐头品牌分享

进口的猫罐头在近期确实经历了一些困难。由于疫情的影响&#xff0c;许多货品无法正常进口&#xff1b;而最近禽流感的问题也对备受好评的德罐品牌造成了重大冲击。 然而&#xff0c;我们国内生产的猫罐头产品在这段时间展现出了出色的表现。我们推出了许多优质产品&#xff0…

生成器简述 - python 基础进阶知识点补全(一)

可迭代对象&#xff1a; 可以用于for ... in ..循环对对象都是可迭代对象&#xff0c;比如&#xff1a; list tuple dict set 可以迭代的对象就是可迭代对象&#xff0c;python 中一切都是对象&#xff0c;在这里主要说的是变量 a [1,2,3] b (1,2,3,) c "1234&q…

文献速递:多模态影像组学文献分享:生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤:概念验证研究

文献速递&#xff1a;多模态影像组学文献分享&#xff1a;生成一种多模态人工智能模型以区分甲状腺良性和恶性滤泡性肿瘤&#xff1a;概念验证研究 文献速递介绍 近年来&#xff0c;人工智能&#xff08;AI&#xff09;领域日益被探索&#xff0c;作为一种增强传统医学诊断和…

Failed to resolve org.junit.platform:junit-platform-launcher:1.9.3

springboot 跑 unit test 的时候&#xff0c;如果报错如题的话&#xff0c;可以更改idea 里的 Settings ——> HTTP Proxy 配置为&#xff1a;Auto-detect proxy settings

Google 发布最强大模型Gemini,能力与GPT-4相当

一、Gemini 介绍 Gemini 是一个多模式模型系列&#xff0c;在图像、音频、视频和文本领域展示了真正强大的功能。其中功能最强大的模型 Gemini Ultra 在 32 个基准测试中的 30 个中提升了最先进水平&#xff0c;其中包括 12 个流行文本和推理基准测试中的 10 个、9 个图像理解…

让工作更高效,那些不能错过的8款泳道图绘制工具

在现代企业的运营管理中&#xff0c;泳道图扮演了至关重要的角色。这种独特的图表工具以其直观、清晰的特点&#xff0c;帮助我们理解和改进复杂的工作流程&#xff0c;从而提升效率。本文将为你分享8款实用且高效的泳道图绘制工具&#xff0c;它们能够帮助你轻松创建出专业级别…

Java程序员,你掌握了多线程吗?【文末送书】

目录 摘要 01、多线程对于Java的意义 02、为什么Java工程师必须掌握多线程 03、Java多线程使用方式 04、如何学好Java多线程 参与方式&#x1f947; 推荐一个人工智能学习网站 https://www.captainbed.cn/bear 摘要 互联网的每一个角落&#xff0c;无论是大型电商平台的…

C语言内存函数讲解

目录 文章目录 内存函数针对的数据类型不确定可能是整型数据&#xff0c;字符数据&#xff0c;结构体数据...... memcpy的使用和模拟实现 memcpy的使用 memcpy打印字符数据 memcpy打印整型数据 memcpy的模拟实现 模拟实现的memcpy打印重叠情境 memmove的使用和模拟实现 memm…

为什么出海企业需要呼叫中心?

随着现代商业世界的发展&#xff0c;企业面临着越来越多的挑战和机遇。为了提高客户服务水平、客户满意度、企业形象和销售业绩&#xff0c;呼叫中心已成为越来越多企业的首选。那么&#xff0c;为什么出海企业需要呼叫中心呢&#xff1f; 1. 提高客户服务质量 首先&#xff…

Linux | tar,bc,uname指令

Linux | tar&#xff0c;bc&#xff0c; 文章目录 Linux | tar&#xff0c;bc&#xff0c;tar指令【重要】bc指令uname –r指令 tar指令【重要】 tar [-cxtzjvf] 文件与目录 … 参数&#xff1a; -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b;-x &am…

为什么对中小企业来说,数字化转型很难?

引言 数字化转型对中小企业至关重要&#xff0c;然而&#xff0c;实施这一转型却充满挑战。中小企业面临着资源、技术、文化和安全方面的种种难题&#xff0c;这些困难限制了它们在数字化领域的发展和竞争力。这种挑战不仅影响企业内部运营&#xff0c;还直接影响其与客户和市…

中国的下一个风口:数字化!

——“中国的下一个风口是什么&#xff1f;数字化&#xff1f;你赞同吗&#xff1f;” ——“中国的下一个风口是不是‘数字化’&#xff0c;不敢妄下定论。” 但可以肯定的是&#xff0c;企业想站上未来产业的风口&#xff0c;“数字化”是必经之路。也就是说&#xff0c;数…

HarmonyOS 开发 Java 与 ArkTS 如何抉择?

本文详细分析 Java 与 ArkTS 在 HarmonyOS 开发过程的区别&#xff0c;力求解答学员的一些困惑。 何为 HarmonyOS&#xff1f; 在讨论语言的差异时&#xff0c;我们先了解下什么是 HarmonyOS。华为官方是这么解释 HarmonyOS 的&#xff1a; “鸿蒙操作系统”特指华为智能终端…