当前位置:首页 > 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列表查询功能 基本数据绑定与渲染 在Vue中实现列表查询,首先需要定义数据源和查询条件。通过v-model绑定搜索输入框,使用计算属性过滤列表。 <template> &l…

vue实现列表全选

vue实现列表全选

实现全选功能的基本思路 在Vue中实现列表全选功能,通常需要结合v-model和计算属性来管理选中状态。全选按钮的状态与列表中所有项的选中状态相互关联。 基础实现方法 准备一个数据列表和对应的选中状…

vue实现列表页面

vue实现列表页面

Vue 列表页面实现方案 基础列表渲染 使用 v-for 指令渲染数组数据,配合 :key 提升性能: <template> <ul> <li v-for=…

vue列表展开实现

vue列表展开实现

Vue 列表展开实现方法 使用 v-for 和 v-show 控制展开状态 通过 v-for 渲染列表项,配合 v-show 控制子内容的显示隐藏。需要为每个列表项维护一个展开状态。 <tem…

vue实现卡片列表

vue实现卡片列表

Vue 实现卡片列表 使用 v-for 动态渲染卡片列表 通过 Vue 的 v-for 指令可以动态渲染卡片列表,数据通常存储在组件的 data 或通过 API 获取。 <template&g…

vue实现多级列表

vue实现多级列表

实现多级列表的两种常见方法 递归组件法 通过组件递归调用自身实现嵌套渲染,适合动态层级数据。 定义组件时通过name属性使其可递归调用。 模板中使用v-for遍历数据,嵌套部分通过条件渲染递…