在vue3中实现下拉分页

在vue3中怎么简单的实现一个下拉分页呢,我们可以使用@scroll="handleScroll" 实现一个简单的滚动分页。代码如下,以下是vue3+ts

<div class="scroll-pagination"  @scroll="handleScroll" ref="scrollContainer" >
   <div v-for="(item,index) in allList :key="index">
     {{item.title}}
   </div>
   <div v-if="!hasMorePages || totalPages<2 || !allList.length" class="no-data">
     暂无更多数据
   </div> 
   <div v-if="hasMorePages && totalPages>1 && allList.length" class="no-data">
     加载中
   </div>  
</div>
import { defineComponent, onMounted, ref, onUnmounted } from 'vue';
export default defineComponent({
  name:'allList',
  setup( props,{emit} ) {
    const scrollContainer = ref<HTMLElement | null>(null)
    const page = ref(1)
    const totalPages = ref(1) 
    const hasMorePages = ref(true);
    const allList = ref<any>([])  
    // 以下拖动分页
    const handleScroll = () => { 
      if (!scrollContainer.value) return;  
      const { scrollTop, clientHeight, scrollHeight } = scrollContainer.value;    
      if (  scrollTop + clientHeight >= scrollHeight - 10 &&   !loading.value && 
      hasMorePages.value  ) {  
        loading.value = true;  
        loadMorePages();  
      }  
    }; 
    const loadMorePages = () => {  
      // 在这里实现加载更多页面的逻辑  
      // 例如,通过API请求获取更多数据  
      // 当数据加载完成后,更新currentPage、hasMorePages和items的值  
      page.value += 1;  
      // 模拟异步加载数据  
      setTimeout(() => {  
        if (page.value <= totalPages.value) {  
          // 假设加载成功,更新加载状态和数据列表  
          loading.value = false;
          getList()
        } else {  
          // 没有更多页面可加载  
          hasMorePages.value = false;  
        }  
      }, 10);  
    }
   async function getList() {
      const res:any = await getListApi({
        data:{
          pageNo:page.value,
          pageSize:5
        }
      })
      if(res?.code === '200') {
        const list =  res.data.records
        allList.value = [...allList.value,...list]
        totalPages.value = Math.ceil(res.data.total/ 5)
      }
    }
   // 在组件卸载前移除滚动事件监听器  
    onUnmounted(() => {  
      if (scrollContainer.value) {  
        scrollContainer.value.removeEventListener('scroll', handleScroll);  
      }  
    }) 
    onMounted(()=>{
      getList()
      if (scrollContainer.value) {  
        scrollContainer.value.addEventListener('scroll', handleScroll);  
      } 
    })
    return  {
      allList,
      scrollContainer,  
      handleScroll,  
      loadMorePages,  
      hasMorePages,  
      loading,
      totalPages
    }
 }
})
.scroll-pagination {  
    height: 100%;  
    overflow-y: scroll;  
    position: relative;  
  } 
  .no-data {  
  /* 暂无更多数据样式 */  
    text-align: center;  
    padding: 20px;  
    color: #999;  
  }

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3 检索下拉分页是一种常见的前端功能,它允许用户通过输入关键字来检索数据,并且在下拉列表显示相关结果,并且支持分页功能。 在Vue3实现检索下拉分页功能的一般步骤如下: 1. 创建一个Vue组件作为检索下拉分页的容器,并在组件内声明相关的数据和方法。 2. 在数据定义用于存储检索结果和分页信息的变量,例如results数组和page对象。 3. 在模板添加一个输入框和一个下拉列表,用于接收用户输入和展示检索结果。 4. 在输入框绑定一个监听事件,当用户输入关键字时触发对应的检索方法。 5. 在检索方法通过调用后端API或对本地数据进行筛选,获取符合条件的结果,并将结果存储到results数组。 6. 在下拉列表使用v-for指令遍历results数组,将每个结果展示为一个选项。 7. 将下拉列表用v-if指令进行条件渲染,只在有结果时显示。 8. 通过添加一个滚动监听事件,在用户滚动到页面底部时触发加载更多的方法,用于实现分页功能。 9. 在加载更多的方法,根据page对象的页码和每页数量参数,调用后端API或在本地数据获取下一页的结果,并将结果追加到results数组。 10. 在模板展示分页按钮,并绑定对应的分页方法,让用户可以切换到上一页或下一页的结果。 通过以上步骤,我们可以实现一个基于Vue3的检索下拉分页功能,让用户能够方便地检索数据,并且在下拉列表展示分页结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值