赞
踩
链接:https://youzan.github.io/vant/#/zh-CN/list#ji-chu-yong-fa
基础用法
List 组件通过 loading 和 finished 两个变量控制加载状态,当组件滚动到底部时,会触发 load 事件并将 loading 设置成 true。此时可以发起异步操作并更新数据,数据更新完毕后,将 loading 设置成 false 即可。若数据已全部加载完毕,则直接将 finished 设置成 true 即可
<van-list v-model="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" > <van-cell v-for="item in list" :key="item" :title="item" /> </van-list> export default { data() { return { list: [], loading: false, finished: false, }; }, methods: { onLoad() { // 异步更新数据 // setTimeout 仅做示例,真实场景中一般为 ajax 请求 setTimeout(() => { for (let i = 0; i < 10; i++) { this.list.push(this.list.length + 1); } // 加载状态结束 this.loading = false; // 数据全部加载完成 if (this.list.length >= 40) { this.finished = true; } }, 1000); }, }, };
示例
methods: { // 封装获取文章列表数据的方法 // isRefresh为布尔值 是否下来刷新 async initArticleList(isRefresh) { // 发起 GET 请求,获取文章的列表数据 const { data: res } = await getArticleListAPI(this.page, this.limit) // 下拉传true 不下拉默认undefined false if (isRefresh) { // 证明是下拉刷新;新数据在前,旧数据在后 // this.artlist = [新数据在后, 旧数据在前] // ...表示将数组展开 this.artlist = [...res, ...this.artlist] this.isLoading = false } else { // 证明是上拉加载更多;旧数据在前,新数据在后 // this.artlist = [旧数据在前, 新数据在后] this.artlist = [...this.artlist, ...res] this.loading = false } if (res.length === 0) { // 证明没有下一页数据了,直接把 finished 改为 true,表示数据加载完了! this.finished = true } }, // 只要 onLoad 被调用,就应该请求下一页数据 onLoad() { console.log('触发了 load 事件!') // 1. 让页码值 +1 this.page++ // 2. 重新请求接口获取数据 this.initArticleList() }, // 下拉刷新的处理函数 onRefresh() { console.log('触发了下拉刷新!') // 1. 让页码值 +1 this.page++ // 2. 重新请求接口获取数据 this.initArticleList(true) } },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。