van-list 下拉刷新 触底分页 触底分页事件只加载一次

博客主要围绕前端列表数据展示问题展开。在切换状态时,列表只显示第一页数据。最初尝试用document相关属性判断触底,因浏览器兼容性问题未成功。后查看vant文档,通过调小offset属性解决触底判断,还给出解决触底事件只监听一遍的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是 头部是筛选的条件,,更换不同的状态,显示不同的列表数据,比如 审批中数据是 对的,触底分页也是对的,如果我切换一个状态的话,总共是 15条数据,但是 切换了状态只显示第一页的数据(我设置的是一页十条数据)

我一开始看了几篇文章 都是通过 document.documentElement.scrollTop,document.documentElement.clientHeight,document.documentElement.scrollHeight  来做的判断

这种写法 有的浏览器支持,有的浏览器不支持,一开始以为是 浏览器内核的原因

后来查看vant 文档,有一个 offset 属性,默认值是 300,

1. 把这个值调小

滚动条与底部距离小于 offset 时触发 load 事件
<van-list :offset="50">
  
</van-list>

首先 ,加上 offect 属性就可以 判断是不是触底了

 getSelectDetail 是获取列表数据的接口

2.  解决触底事件只监听一遍的方法: 就是给 切换搜索条件以及  下拉刷新函数加如下两行代码

loading.value = false
finished.value = false

loading   设置为false  是因为 加载过程中  也就是 loading 是true的时候,不触发load 事件

### 如何在 Vant-UI 中实现数据懒加载 Vant 是一款轻量级、可定制化的 Vue 移动端 UI 库,适用于构建移动 Web 应用程序。为了提升用户体验并优化性能,许多场景都需要支持 **数据懒加载** 功能。以下是通过 Vant 的 `List` 组件实现数据懒加载的具体方法。 #### 使用 List 组件实现数据懒加载 Vant 提供了专门用于处理列表滚动加载需求的组件——`List`[^1]。该组件能够监听用户的滑动操作,并触发自定义事件以动态加载更多数据。下面是一个完整的示例: ```vue <template> <div class="scroll-container"> <!-- 列表容器 --> <van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" > <van-cell v-for="(item, index) in list" :key="index" :title="item.name" /> </van-list> </div> </template> <script> export default { data() { return { list: [], // 存储数据的数组 loading: false, // 控制加载状态 finished: false, // 是否已加载完毕 page: 1, // 当前页码 pageSize: 10, // 每页的数据条数 }; }, methods: { onLoad() { // 异步更新数据 setTimeout(() => { this.fetchData().then((newItems) => { if (newItems.length === 0) { this.finished = true; // 如果没有新数据,则标记为完成 } else { this.list.push(...newItems); this.page++; // 增加页码以便下次请求新的分页数据 } this.loading = false; // 加载完成后关闭加载状态 }); }, 500); // 模拟网络延迟 }, fetchData() { // 模拟异步获取数据的方法 const start = (this.page - 1) * this.pageSize; const end = this.page * this.pageSize; return new Promise((resolve) => { resolve( Array.from({ length: Math.min(10, end - start) }).map((_, i) => ({ name: `Item ${(start + i + 1)}` })) ); }); } } }; </script> <style scoped> .scroll-container { height: calc(100vh - 100px); /* 设置高度 */ overflow-y: auto; /* 启用垂直滚动 */ } </style> ``` 上述代码展示了如何使用 `List` 和 `Cell` 组件来实现数据懒加载的功能。其中的关键点在于配置 `v-model` 属性绑定加载状态以及设置 `@load` 方法响应用户滚动行为[^4]。 --- #### 配置说明 - **`v-model`**: 表示当前是否处于加载状态。当值为 `true` 时会显示加载动画;当加载结束需将其设回 `false`。 - **`:finished`**: 标记是否有剩余未加载的数据。如果全部数据已经展示出来则应将此属性设为 `true`。 - **`@load`**: 用户触底时自动调用的回调函数,在这里可以发起 API 请求或者模拟数据填充逻辑。 --- #### 扩展功能 除了基本的懒加载外,还可以结合其他特性进一步增强体验效果,比如加入下拉刷新功能: ##### 下拉刷新与上拉加载组合实例 ```javascript import { PullRefresh, List, Cell } from 'vant'; Vue.use(PullRefresh).use(List).use(Cell); // 在模板部分增加 pull-refresh 包裹层 <van-pull-refresh v-model="refreshing" @refresh="onRefresh"> <van-list ...></van-list> </van-pull-refresh> ``` 在此基础上只需额外维护一个布尔型变量 `refreshing` 即可控制刷新过程中的交互反馈。 --- ### 性能考虑 对于大规模数据集而言,单纯依赖前端渲染可能会带来较大的内存消耗风险。因此建议开发者合理调整每次返回的结果数量(即每页大小),并通过服务端分页机制减少单次传输的压力[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值