当前位置:首页 > VUE

vue实现每页显示条数

2026-02-24 06:41:18VUE

实现每页显示条数的基本配置

在Vue中实现分页功能通常需要结合分页组件和数据管理。通过v-model绑定当前页码和每页显示条数,动态计算分页数据。

<template>
  <div>
    <select v-model="pageSize" @change="handlePageSizeChange">
      <option value="10">10条/页</option>
      <option value="20">20条/页</option>
      <option value="50">50条/页</option>
    </select>

    <ul>
      <li v-for="item in paginatedData" :key="item.id">{{ item.name }}</li>
    </ul>

    <button @click="currentPage--" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }} / {{ totalPages }}</span>
    <button @click="currentPage++" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

计算分页数据逻辑

通过计算属性实现数据分片,根据当前页码和每页条数返回对应数据段。

vue实现每页显示条数

<script>
export default {
  data() {
    return {
      allData: [], // 原始数据
      currentPage: 1,
      pageSize: 10
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.allData.length / this.pageSize)
    },
    paginatedData() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      return this.allData.slice(start, end)
    }
  },
  methods: {
    handlePageSizeChange() {
      this.currentPage = 1 // 切换每页条数时重置到第一页
    }
  }
}
</script>

结合第三方分页组件

使用Element UI等库可以快速实现专业分页功能。el-pagination组件提供现成的每页条数选择器。

vue实现每页显示条数

<template>
  <el-pagination
    v-model:current-page="currentPage"
    v-model:page-size="pageSize"
    :page-sizes="[10, 20, 50, 100]"
    :total="totalItems"
    layout="total, sizes, prev, pager, next"
  />
</template>

后端分页实现方案

当前端数据量过大时,建议采用后端分页。通过API参数传递页码和每页条数。

methods: {
  fetchData() {
    axios.get('/api/items', {
      params: {
        page: this.currentPage,
        size: this.pageSize
      }
    }).then(response => {
      this.paginatedData = response.data.items
      this.totalItems = response.data.total
    })
  }
}

本地存储记住用户选择

使用localStorage保存用户选择的每页条数偏好,提升用户体验。

mounted() {
  const savedSize = localStorage.getItem('preferredPageSize')
  if (savedSize) this.pageSize = Number(savedSize)
},
methods: {
  handlePageSizeChange() {
    localStorage.setItem('preferredPageSize', this.pageSize)
    this.currentPage = 1
    this.fetchData()
  }
}

标签: 每页条数
分享给朋友: