vue2用vant的van-pull-refresh实现上拉加载、下拉刷新

<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
        <van-list
          v-model="loading"
          :finished="finished"
          finished-text="没有更多了"
          @load="onLoad"
          :distance="150">
          <Empty
            v-if="!list.length" />
          <Table
            v-else
            :data="list"
            :column="column"
            :isShowStatus="false" />
        </van-list>
      </van-pull-refresh>
      
      const pageNum = ref(0)
	const pageSize = ref(15)
	const loading = ref(false)
	const finished = ref(false)
	const refreshing = ref(false)
    const column= ref([])
		column.value = [
		  '11',
		  '22',
		]
   const getPageList = (_pageNum = 0) => {
	  if (_pageNum) {
	    pageNum.value = _pageNum
	  }
	  getData({
	    sss:'all',
	    pageNum: _pageNum || pageNum.value,
	    pageSize: pageSize.value
	  })
    .then(data => {
      if (data.list.length == 0) {
        // 本次没有数据
        if (pageNum.value > 1) {
          // 不是第一页,上拉加载
          finished.value = true // 数据全部加载完毕
        } else {
          //第一页,下拉刷新
          list.value = []
          showFailToast('暂无数据')
          refreshing.value = false
        }
      } else {
        if (pageNum.value > 1) {
          let _preData = list.value
          if (data.list.length) {
            let _data = data.list
            list.value = [..._preData, ..._data]
          } else {
            refreshing.value = false
          }
        } else {
          list.value = data.list
          refreshing.value = false
        }
      }
      // 更新 loading 和 finished 的状态值
      loading.value = false
      // 如果数据全部加载完毕,则将 finished 置为 true
      if (finished.value) {
         showToast('已经没有更多数据了')
      }
    })
    .catch(err => {
      showFailToast(err.msg || '请求失败')
    })
}

	const onRefresh = () => {
		  // 下拉刷新
		  finished.value = false // 每次下拉刷新,要将finished置为false
		  getPageList(1)
		  console.log('下拉刷新222', finished.value, loading.value)
	}

const onLoad = useDebounceFn(() => {
  loading.value = true
  pageNum.value++
  console.log('上拉加载222', finished.value, loading.value)
  getPageList()
}, 200)

onMounted(() => {
  // getInitData()
})
	
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在使用 `van-pull-refresh` 组件的同时实现滑动加载数据的功能,可以结合使用 `van-pull-refresh` 和 `van-list` 组件。 首先,在模板中使用 `van-pull-refresh` 和 `van-list` 组件来创建下拉刷新和滑动加载的效果。示例如下: ```vue <template> <div> <van-pull-refresh @refresh="onRefresh"> <van-list v-model="list" :finished="finished" @load="onLoad"> <template #default="{ item }"> <!-- 渲染每个数据项的内容 --> <van-cell :title="item.title" :value="item.value" /> </template> </van-list> </van-pull-refresh> </div> </template> <script> export default { data() { return { list: [], // 初始化为空数组 finished: false, // 滑动加载是否已完成 page: 1, // 当前页码 }; }, methods: { onRefresh() { // 下拉刷新时的逻辑 // 可以发送异步请求获取最新数据 // 示例中使用 setTimeout 模拟异步请求 setTimeout(() => { // 假设请求返回的数据是数组 const data = [ { title: 'Title 1', value: 'Value 1' }, { title: 'Title 2', value: 'Value 2' }, { title: 'Title 3', value: 'Value 3' }, ]; // 更新列表数据 this.list = data; // 取消下拉刷新状态 this.$refs.pullRefresh.finishPullDown(); }, 1000); }, onLoad() { // 滑动加载时的逻辑 // 可以发送异步请求获取更多数据 // 示例中使用 setTimeout 模拟异步请求 setTimeout(() => { // 假设请求返回的数据是数组 const data = [ { title: 'Title 4', value: 'Value 4' }, { title: 'Title 5', value: 'Value 5' }, { title: 'Title 6', value: 'Value 6' }, ]; // 更新列表数据 this.list = this.list.concat(data); // 如果已加载完所有数据,设置 finished 为 true if (this.page >= 3) { this.finished = true; } // 加载完成后调用 finishLoad 方法 this.$refs.list.finishLoad(); // 增加页码 this.page++; }, 1000); }, }, }; </script> ``` 在上述示例中,`van-pull-refresh` 组件用于实现下拉刷新的效果,当下拉刷新触发时,会调用 `onRefresh` 方法。在 `onRefresh` 方法中,可以发送异步请求获取最新的数据,并更新列表数据。最后,通过 `finishPullDown` 方法取消下拉刷新状态。 `van-list` 组件用于实现滑动加载的效果,当滑动加载触发时,会调用 `onLoad` 方法。在 `onLoad` 方法中,可以发送异步请求获取更多的数据,并更新列表数据。通过 `finishLoad` 方法告知组件加载完成。 请注意,以上示例中的异步请求使用了 setTimeout 来模拟,实际情况下需要使用适当的方式发送请求。另外,根据具体需求,你可能需要调整代码来满足你的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值