使用vant list实现订单列表,支持下拉加载更多

        在公司项目开发时,有一个需求是实现可以分页的订单列表,由于是移动端项目,所以最好的解决方法是做下拉加载更多。

1.在页面中使用vant组件
<van-list
    v-model="loading"
    :finished="finished"
    finished-text="没有更多了"
    @load="onLoad"
>
    <van-cell 
        v-for="(item,index) in orderList" 
        :key="index" class="orderList" 
        @click="goDetail(item.orderNo)"
   >
        <div class="order"> </div>
   </van-cell>
</van-list>
2.下拉加载事件
onLoad(){
    this.loading = true;
    //分页
    this.pageNum++
    //请求数据
    this.getList()
},
3.请求数据
getList(){
    let params = {
        size: 10,
        current: this.pageNum,
    }
    this.$http.post('xxxxxxxx',params).then(res => {
        if (res.code == 0){
            this.orderList = this.orderList.concat(res.data.rows)
            this.loading = false

            if (res.data.rows.length < 10){
              this.finished = true
            }else{
              this.finished = false
            }
        }else{
            this.$toast.fail(res.msg)
        }
    })
}
4.效果

vant 是一个基于 Vue.js 的移动端组件库,提供了丰富的 UI 组件和交互功能。它也提供了上拉加载更多下拉刷新的功能,方便开发者实现列表数据的无限滚动和数据刷新。 要在 vant实现上拉加载更多,可以使用 vant 的 `van-list` 组件配合 `van-pull-refresh` 和 `load-more` 属性。`load-more` 属性可以设置为一个函数,当滚动到底部时会触发该函数,从而执行加载更多的逻辑。 下面是一个简单的示例代码: ```html <template> <div> <van-list v-model="list" :finished="finished" :loading="loading" @load="onLoad" > <template v-slot:default="{ item }"> <div class="item">{{ item }}</div> </template> </van-list> </div> </template> <script> export default { data() { return { list: [], finished: false, loading: false, page: 1, pageSize: 10, }; }, methods: { onLoad() { this.loading = true; // 模拟异步请求数据 setTimeout(() => { for (let i = 0; i < this.pageSize; i++) { this.list.push(`Item ${this.page * this.pageSize + i}`); } this.page++; if (this.list.length >= 50) { this.finished = true; } this.loading = false; }, 1000); }, }, }; </script> ``` 要实现下拉刷新,可以在 `van-list` 上使用 `van-pull-refresh` 组件,并监听 `refresh` 事件,当用户下拉刷新时会触发该事件,从而执行刷新数据的逻辑。 下面是一个简单的示例代码: ```html <template> <div> <van-list v-model="list" :loading="loading" @refresh="onRefresh" > <template v-slot:default="{ item }"> <div class="item">{{ item }}</div> </template> </van-list> </div> </template> <script> export default { data() { return { list: [], loading: false, }; }, methods: { onRefresh() { this.loading = true; // 模拟异步请求数据 setTimeout(() => { this.list = generateData(); this.loading = false; }, 1000); }, }, }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值