Vant 实现 上拉加载更多
Vant 的 List 组件 默认支持 瀑布流滚动加载。官方的示例是用定时器模拟的数据。我们在项目实战中,肯定是结合ajax请求处理的。那么我们该如何实现这个效果呢?
Vant 的 List组件 使用方法这里就不详细说明了,官方文档已经写的很详细了。直接上项目中的实战代码:
<template> <div> <van-list v-model="loading" :finished="finished" :immediate-check="false" finished-text="没有更多了" @load="onLoad" :offset="10" > //itemList换成你自己的数据 <van-cell v-for="item in itemList" :key="item.id"> </van-cell> </van-list> //没数据时显示 <div class="no-data" v-if="!this.itemList"> <img src="../assets/images/null.png" alt="暂无记录" class="img" /> </div> </div> </template> <script> export default { created() { //创建组件时,加载第1页数据 this.getroadList(); }, data() { return { loading: false, finished: false, page: 1,//请求第几页 pageSize: 10,//每页请求的数量 total: 0,//总共的数据条数 itemList: [], }; }, methods: { getroadList() { let params = { page: this.page, pageSize: this.pageSize }; //this.$api.pay.schedule(params)是我自己封装的get请求接口 this.$api.pay.schedule(params).then(res => { let rows = res.data.rows; //请求返回当页的列表 this.loading = false; this.total = res.data.total; if (rows == null || rows.length === 0) { // 加载结束 this.finished = true; return; } // 将新数据与老数据进行合并 this.itemList = this.itemList.concat(rows); //如果列表数据条数>=总条数,不再触发滚动加载 if (this.itemList.length >= this.total) { this.finished = true; } }); }, //滚动加载时触发,list组件定义的方法 onLoad() { this.page++; this.getroadList(); } } }; </script>
注意事项:
设置<van-list>组件 :immediate-check="false"
理由:禁止 List 初始化时触发 load 事件。把加载第一屏的事件放在 created() 里面。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构