当前位置:首页 > 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>

核心计算属性

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

vue实现分页按钮

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;
  }
}

事件处理与方法

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

vue实现分页按钮

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
  }
}

使用示例

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

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

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

相关文章

vue实现按钮渐变

vue实现按钮渐变

实现按钮渐变的几种方法 使用CSS线性渐变 通过CSS的background属性结合linear-gradient函数实现颜色渐变效果。在Vue组件的<style>部分直接定义样式:…

分页用vue实现

分页用vue实现

实现分页的基本思路 在Vue中实现分页功能,通常需要以下几个核心部分:数据列表、当前页码、每页显示数量、总页数计算、页码切换逻辑。以下是一个完整的实现方案。 分页组件代码示例 <templat…

vue加载实现分页

vue加载实现分页

Vue 实现分页加载的方法 使用 Element UI 的分页组件 安装 Element UI 后,可以直接使用其分页组件。在模板中添加分页组件,并绑定相关事件和数据。 <template&g…

vue怎样实现分页

vue怎样实现分页

Vue实现分页的方法 使用第三方库(如Element UI或Ant Design Vue) Element UI的Pagination组件可以直接集成到Vue项目中。安装Element UI后,在组件…

vue实现按钮控制

vue实现按钮控制

Vue 实现按钮控制的方法 在 Vue 中实现按钮控制可以通过多种方式,包括禁用按钮、动态样式、条件渲染等。以下是几种常见的方法: 使用 v-bind:disabled 控制按钮禁用状态 通过绑定…

用vue实现分页

用vue实现分页

使用Vue实现分页功能 分页是Web应用中常见的功能,可以通过Vue结合计算属性和事件处理实现。以下是实现分页的核心步骤: 数据准备 定义数据模型,包括当前页码、每页显示数量和总数据列表: d…