当前位置:首页 > VUE

vue实现列表翻页

2026-02-19 20:09:51VUE

使用 Vue 实现列表翻页

分页组件实现

在 Vue 中实现列表翻页通常需要结合分页组件和数据请求逻辑。以下是一个基础实现方案:

<template>
  <div>
    <ul>
      <li v-for="item in currentPageData" :key="item.id">{{ item.name }}</li>
    </ul>
    <div class="pagination">
      <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
      <span>{{ currentPage }} / {{ totalPages }}</span>
      <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      allData: [], // 所有数据
      currentPage: 1, // 当前页码
      pageSize: 10 // 每页显示数量
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.allData.length / this.pageSize)
    },
    currentPageData() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      return this.allData.slice(start, end)
    }
  },
  methods: {
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--
      }
    },
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++
      }
    }
  },
  async created() {
    // 这里替换为实际的数据获取逻辑
    this.allData = await fetchData()
  }
}
</script>

与后端API交互

实际项目中通常需要从后端API获取分页数据:

vue实现列表翻页

methods: {
  async fetchPageData(page) {
    try {
      const response = await axios.get('/api/items', {
        params: {
          page,
          size: this.pageSize
        }
      })
      this.allData = response.data.items
      this.totalCount = response.data.total
    } catch (error) {
      console.error('获取数据失败:', error)
    }
  }
}

使用第三方分页组件

可以考虑使用现成的分页组件如 vue-paginateelement-ui 的分页组件:

vue实现列表翻页

<template>
  <el-pagination
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-size="pageSize"
    :total="totalCount"
    layout="prev, pager, next">
  </el-pagination>
</template>

无限滚动实现

对于移动端或需要流畅滚动体验的场景,可以使用无限滚动:

import InfiniteLoading from 'vue-infinite-loading'

export default {
  components: { InfiniteLoading },
  methods: {
    async loadMore($state) {
      try {
        const newData = await fetchMoreData()
        if (newData.length) {
          this.items.push(...newData)
          $state.loaded()
        } else {
          $state.complete()
        }
      } catch (err) {
        $state.error()
      }
    }
  }
}

性能优化

对于大型数据集,考虑虚拟滚动技术以提高性能:

<template>
  <RecycleScroller
    class="scroller"
    :items="items"
    :item-size="50"
    key-field="id">
    <template v-slot="{ item }">
      <div class="item">
        {{ item.name }}
      </div>
    </template>
  </RecycleScroller>
</template>

以上方案可以根据具体项目需求进行组合和调整,实现适合不同场景的列表翻页功能。

标签: 翻页列表
分享给朋友:

相关文章

vue实现列表

vue实现列表

实现列表的基本方法 在Vue中实现列表通常使用v-for指令,这是Vue的核心功能之一。v-for可以遍历数组或对象,为每个元素生成对应的DOM节点。 <template> <…

vue实现功能列表

vue实现功能列表

Vue 实现功能列表的方法 在 Vue 中实现功能列表通常涉及数据绑定、列表渲染、事件处理和状态管理。以下是几种常见的方法: 数据驱动列表渲染 使用 v-for 指令可以轻松实现列表渲染。假设有一个…

vue实现模拟列表

vue实现模拟列表

使用 Vue 实现模拟列表 在 Vue 中实现模拟列表可以通过多种方式完成,常见的方法包括使用 v-for 指令动态渲染数据、结合计算属性或方法进行列表操作。以下是一个完整的实现方案: 基础列表渲染…

vue实现数字翻页递增

vue实现数字翻页递增

Vue 实现数字翻页递增效果 实现数字翻页递增效果可以通过 Vue 的过渡动画和动态数据绑定完成。以下是具体实现方法: 基本实现思路 使用 Vue 的 transition 组件结合 CSS 动画,…

vue虚拟列表实现原理

vue虚拟列表实现原理

Vue 虚拟列表实现原理 虚拟列表(Virtual List)是一种优化长列表渲染性能的技术,通过仅渲染可视区域内的元素,大幅减少 DOM 节点数量,提升页面性能。 核心原理 可视区域计算 通过容…

vue实现列表树加载

vue实现列表树加载

Vue 实现列表树加载 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身,可以轻松处理嵌套数据。 <template> <ul>…