vue使用vant组件,van-pull-refresh和van-list分页加载及下拉刷新

<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
    <van-list
      v-model="loading"
      :finished="finished"
      :finished-text="list.length > 0 ? '已经到底了' : ''"
      @load="onLoad"
    >
          <div v-for='item in list'></div>
     </van-list>
</van-pull-refresh>


data () {
    return {
      refreshing: false,
      loading: false,
      finished: false,
      list: [],
      page:1
    }
}  ,
 methods: {
        // 加载
    onLoad () {
      setTimeout(() => {
        if (this.refreshing) {
          this.page = 1
          this.list = []
          this.refreshing = false
        }
        this.getData()
      }, 500)
    },
    // 下拉刷新
    onRefresh () {
      // 清空列表数据
      this.finished = false

      // 重新加载数据
      // 将 loading 设置为 true,表示处于加载状态
      this.loading = true
        
       //如果想下拉时立马清空数据 加载
      this.page = 1
      this.list = []

      this.onLoad()
    },
          // 获取列表
    getData () {
//后台发送请求
      this.$http.list({})
        .then(res => {
          console.log(res)
          if (res.data.status === 'success') {
            let data = res.data.data
            //  分页操作
            if (data.length > 0) {
              data.forEach(curr => {
                this.list.push(curr)
              })
              this.loading = false
              this.page++
            } else {//停止调用接口
              this.finished = true
            }
          } else {
            this.finished = true
            this.loading = false
            this.$toast(res.data.msg)
          }
        })
        .catch(err => {
          this.finished = true
          this.loading = false
          console.log(err)
          this.$toast('您的网络有些拥挤,请稍后再试')
        })
    },
  }

仅供自己学习参考,不喜勿喷

好的,我可以为你提供一个基本的代码示例,你可以根据自己的需求进行修改: ``` <template> <div class="list-container"> <div class="search-box"> <!-- 头部搜索框 --> <van-search placeholder="搜索" /> </div> <van-tabs v-model="active" sticky> <!-- tab选项卡 --> <van-tab title="选项卡1"> <van-list v-model="list" finished-text="没有更多了" @load="onLoad" :finished="finished"> <template #default="{ item }"> <!-- 列表项 --> <van-cell :title="item.title" :label="item.label" /> </template> </van-list> </van-tab> <van-tab title="选项卡2"> <van-list v-model="list2" finished-text="没有更多了" @load="onLoad2" :finished="finished2"> <template #default="{ item }"> <van-cell :title="item.title" :label="item.label" /> </template> </van-list> </van-tab> </van-tabs> </div> </template> <script> export default { data() { return { active: 0, // 当前选中的tab索引 list: [], // 列表数据1 list2: [], // 列表数据2 finished: false, // 列表1是否已加载完毕 finished2: false, // 列表2是否已加载完毕 } }, methods: { // 列表1触底加载 onLoad() { // TODO: 发送请求获取数据 // 如果没有更多数据了,将finished设置为true this.finished = true }, // 列表2触底加载 onLoad2() { // TODO: 发送请求获取数据 // 如果没有更多数据了,将finished2设置为true this.finished2 = true }, // 列表1上拉刷新 onRefresh() { // TODO: 发送请求获取数据 // 将finished设置为false,以便再次触底加载 this.finished = false }, // 列表2上拉刷新 onRefresh2() { // TODO: 发送请求获取数据 // 将finished2设置为false,以便再次触底加载 this.finished2 = false }, }, } </script> <style> .list-container { height: 100vh; display: flex; flex-direction: column; } .search-box { padding: 10px; } </style> ``` 需要注意的是,以上代码示例中的方法数据都需要自己根据实际情况进行编写。同时,为了提高性能,建议在触底加载使用分页的方式获取数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值