当前位置:首页 > VUE

vue实现分页按钮

2026-02-17 22:22:34VUE

Vue 分页按钮实现方法

基础分页组件结构

使用 Vue 的 v-for 渲染页码按钮,结合计算属性动态生成页码范围:

<template>
  <div class="pagination">
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <button 
      v-for="page in pageRange" 
      :key="page"
      @click="changePage(page)"
      :class="{ active: page === currentPage }"
    >
      {{ page }}
    </button>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

核心计算属性

计算页码范围时考虑当前页位置和最大显示页码数:

computed: {
  totalPages() {
    return Math.ceil(this.totalItems / this.itemsPerPage);
  },
  pageRange() {
    const range = [];
    const maxVisible = 5; // 最大可见页码数
    let start = Math.max(1, this.currentPage - Math.floor(maxVisible / 2));
    const end = Math.min(start + maxVisible - 1, this.totalPages);

    start = Math.max(1, end - maxVisible + 1);

    for (let i = start; i <= end; i++) {
      range.push(i);
    }
    return range;
  }
}

事件处理与方法

实现页码切换和边界检查:

methods: {
  changePage(page) {
    if (page !== this.currentPage) {
      this.currentPage = page;
      this.$emit('page-changed', page);
    }
  },
  prevPage() {
    if (this.currentPage > 1) {
      this.changePage(this.currentPage - 1);
    }
  },
  nextPage() {
    if (this.currentPage < this.totalPages) {
      this.changePage(this.currentPage + 1);
    }
  }
}

样式优化

添加基础样式增强交互体验:

.pagination {
  display: flex;
  gap: 5px;
  margin-top: 20px;
}
button {
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
  cursor: pointer;
}
button:hover:not(:disabled) {
  background: #eee;
}
button.active {
  background: #42b983;
  color: white;
  border-color: #42b983;
}
button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

高级功能扩展

  1. 省略号处理
    当页码范围不连续时显示省略号:
// 在 computed 中修改 pageRange
if (start > 1) range.unshift('...');
if (end < this.totalPages) range.push('...');
  1. 动态页码数量
    根据屏幕宽度调整可见页码数:
data() {
  return {
    maxVisible: window.innerWidth < 768 ? 3 : 5
  }
},
mounted() {
  window.addEventListener('resize', this.handleResize);
},
methods: {
  handleResize() {
    this.maxVisible = window.innerWidth < 768 ? 3 : 5;
  }
}
  1. Props 配置
    使组件可通过 props 接收外部参数:
props: {
  totalItems: {
    type: Number,
    required: true
  },
  itemsPerPage: {
    type: Number,
    default: 10
  },
  currentPage: {
    type: Number,
    default: 1
  }
}

使用示例

在父组件中集成分页控件:

vue实现分页按钮

<pagination
  :total-items="100"
  :items-per-page="10"
  :current-page.sync="currentPage"
  @page-changed="handlePageChange"
/>

标签: 分页按钮
分享给朋友:

相关文章

vue实现按钮位置

vue实现按钮位置

Vue 实现按钮位置调整方法 在 Vue 中调整按钮位置可以通过多种方式实现,以下是一些常见的方法: 使用 CSS 定位 通过 CSS 的定位属性(如 position、top、left、right…

vue实现下拉分页思想

vue实现下拉分页思想

实现下拉分页的基本思想 下拉分页(Infinite Scroll)是一种常见的分页加载方式,当用户滚动到页面底部时自动加载下一页数据。Vue 中可以通过监听滚动事件或使用第三方库实现。 监听滚动事件…

vue实现按钮位置

vue实现按钮位置

Vue 实现按钮位置的几种方法 在 Vue 中实现按钮位置的控制可以通过多种方式实现,包括 CSS 样式、Flexbox 布局、Grid 布局以及 Vue 的动态绑定等。以下是几种常见的实现方法:…

vue实现分页请求

vue实现分页请求

Vue 实现分页请求的方法 在 Vue 中实现分页请求通常需要结合前端分页组件和后端 API 的分页逻辑。以下是常见的实现方法: 分页组件与数据绑定 使用 v-pagination 或其他分页组件(…

vue实现新闻分页

vue实现新闻分页

Vue 实现新闻分页的方法 数据准备与分页逻辑 在 Vue 中实现新闻分页需要准备新闻数据列表和分页参数。通常使用 data 属性存储当前页码和每页显示的新闻数量。 data() { retur…

vue实现分页打印

vue实现分页打印

实现分页打印的基本思路 在Vue中实现分页打印功能通常需要结合CSS的分页控制属性和JavaScript的打印API。核心是通过CSS的@media print媒体查询和page-break相关属性控…