当前位置:首页 > VUE

vue 分页功能实现

2026-03-08 14:41:59VUE

Vue 分页功能实现

分页组件基础结构

创建一个独立的 Pagination.vue 组件,包含页码按钮、上一页/下一页导航等功能。核心模板结构如下:

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

计算属性设计

通过计算属性动态生成页码数组,并处理边界情况:

computed: {
  totalPages() {
    return Math.ceil(this.totalItems / this.itemsPerPage);
  },
  pages() {
    const range = [];
    const start = Math.max(1, this.currentPage - 2);
    const end = Math.min(this.totalPages, this.currentPage + 2);

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

分页逻辑方法

实现页面跳转的核心方法:

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

父组件集成

在父组件中绑定分页事件并处理数据分片:

vue 分页功能实现

<template>
  <div>
    <table>
      <!-- 显示当前页数据 -->
      <tr v-for="item in paginatedData" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
    <Pagination 
      :total-items="data.length" 
      :items-per-page="10"
      :current-page="currentPage"
      @page-changed="handlePageChange"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      data: [] // 原始数据
    }
  },
  computed: {
    paginatedData() {
      const start = (this.currentPage - 1) * 10;
      const end = start + 10;
      return this.data.slice(start, end);
    }
  },
  methods: {
    handlePageChange(page) {
      this.currentPage = page;
    }
  }
}
</script>

样式优化

添加基础样式增强用户体验:

.pagination button {
  margin: 0 5px;
  padding: 5px 10px;
  border: 1px solid #ddd;
  background: white;
}
.pagination button.active {
  background: #42b983;
  color: white;
}
.pagination button:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

后端分页实现(可选)

如需对接后端API,修改分页事件处理:

vue 分页功能实现

methods: {
  async handlePageChange(page) {
    this.currentPage = page;
    const res = await axios.get('/api/data', {
      params: {
        page,
        size: 10
      }
    });
    this.data = res.data.items;
    this.totalItems = res.data.total;
  }
}

高级功能扩展

  1. 每页条数选择器

    <select v-model="itemsPerPage" @change="resetPagination">
    <option value="10">10条/页</option>
    <option value="20">20条/页</option>
    </select>
  2. 跳转到指定页码

    <input 
    type="number" 
    :min="1" 
    :max="totalPages" 
    v-model="jumpPage"
    @keyup.enter="goToPage(jumpPage)"
    >
  3. 添加省略号显示 在计算属性中处理页码范围时,可以添加 ... 指示符:

    if (start > 1) range.unshift('...');
    if (end < this.totalPages) range.push('...');

标签: 分页功能
分享给朋友:

相关文章

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常包…

vue前端分页怎么实现

vue前端分页怎么实现

使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 <el-pagination>,可以快速实现分页功能。需要安装 Element UI 并注册组件。 &…

vue的艾特功能实现

vue的艾特功能实现

Vue 中的 @ 功能实现 Vue 中的 @ 符号是 v-on 指令的简写,用于绑定事件监听器。以下是具体实现方式: 基本语法 <button @click="handleClick">…

vue实现选项卡分页

vue实现选项卡分页

实现选项卡分页的基本思路 在Vue中实现选项卡分页功能,可以通过动态组件或条件渲染结合数据绑定完成。核心逻辑是维护一个当前激活的选项卡状态,根据用户点击切换内容。 使用v-if条件渲染 通过v-if…

vue电影功能实现

vue电影功能实现

Vue 电影功能实现 数据获取与展示 使用 Axios 或 Fetch API 从电影 API(如 TMDb、豆瓣 API)获取数据。在 Vue 的 created 或 mounted 生命周期钩子中…

vue实现分页条数

vue实现分页条数

Vue 实现分页条数控制 在 Vue 中实现分页条数控制通常需要结合分页组件和后端 API 支持。以下是几种常见的实现方式: 使用 Element UI 的分页组件 Element UI 提供了强大…