当前位置:首页 > VUE

使用vue实现分页查询

2026-02-21 13:29:18VUE

使用 Vue 实现分页查询

基础实现思路

分页查询通常需要前端与后端配合完成。前端负责展示分页控件和当前页数据,后端负责根据页码和每页数量返回对应数据。

前端实现步骤

  1. 安装必要依赖 如果项目需要axios进行HTTP请求,可以通过npm安装:

    npm install axios
  2. 创建分页组件 在Vue组件中定义分页相关数据:

    data() {
      return {
        currentPage: 1,
        pageSize: 10,
        totalItems: 0,
        items: []
      }
    }
  3. 获取分页数据方法 创建获取数据的方法,通常使用axios调用API:

    methods: {
      fetchData() {
        axios.get('/api/items', {
          params: {
            page: this.currentPage,
            size: this.pageSize
          }
        })
        .then(response => {
          this.items = response.data.items
          this.totalItems = response.data.total
        })
      }
    }
  4. 监听分页变化 在组件中添加分页变化监听:

    watch: {
      currentPage() {
        this.fetchData()
      }
    }
  5. 模板部分 在模板中添加分页控件和数据展示:

    <template>
      <div>
        <!-- 数据列表 -->
        <ul>
          <li v-for="item in items" :key="item.id">
            {{ item.name }}
          </li>
        </ul>
    
        <!-- 分页控件 -->
        <div class="pagination">
          <button @click="currentPage--" :disabled="currentPage === 1">上一页</button>
          <span>第 {{ currentPage }} 页</span>
          <button @click="currentPage++" :disabled="currentPage * pageSize >= totalItems">下一页</button>
        </div>
      </div>
    </template>

使用Element UI分页组件

如果项目使用Element UI,可以简化分页实现:

  1. 安装Element UI

    npm install element-ui
  2. 使用分页组件

    <template>
      <div>
        <el-table :data="items">
          <!-- 表格列定义 -->
        </el-table>
    
        <el-pagination
          @current-change="handleCurrentChange"
          :current-page="currentPage"
          :page-size="pageSize"
          :total="totalItems"
          layout="prev, pager, next">
        </el-pagination>
      </div>
    </template>
  3. 处理页码变化

    methods: {
      handleCurrentChange(val) {
        this.currentPage = val
        this.fetchData()
      }
    }

后端API要求

后端API需要支持分页参数,通常格式为:

GET /api/items?page=1&size=10

返回格式示例:

使用vue实现分页查询

{
  "items": [...],
  "total": 100
}

完整示例代码

<template>
  <div>
    <table>
      <tr v-for="item in items" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>

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

<script>
import axios from 'axios'

export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      items: []
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.pageSize)
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      axios.get('/api/items', {
        params: {
          page: this.currentPage,
          size: this.pageSize
        }
      })
      .then(response => {
        this.items = response.data.items
        this.totalItems = response.data.total
      })
    }
  },
  watch: {
    currentPage() {
      this.fetchData()
    }
  }
}
</script>

注意事项

  • 确保后端API正确处理分页参数
  • 考虑添加加载状态提示
  • 对于大型数据集,考虑实现虚拟滚动代替分页
  • 可以添加每页显示数量选择器
  • 考虑缓存已加载的页面数据

标签: 分页vue
分享给朋友:

相关文章

vue实现主页

vue实现主页

Vue 实现主页的基本步骤 创建一个 Vue 主页通常涉及以下几个关键步骤,从项目初始化到页面布局和功能实现。 初始化 Vue 项目 使用 Vue CLI 或 Vite 初始化项目。Vue CLI…

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue能实现

vue能实现

Vue.js 是一个流行的前端框架,能够实现多种功能。以下是 Vue 能够实现的主要功能和特性: 响应式数据绑定 Vue 的核心特性之一是响应式数据绑定。通过数据驱动视图,当数据发生变化时,视图会自…

vue实现mouseout

vue实现mouseout

Vue 实现 mouseout 事件的方法 在 Vue 中实现 mouseout 事件可以通过多种方式完成,以下是几种常见的方法: 使用 v-on 指令 Vue 提供了 v-on 指令(或简写为 @…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue实现加减

vue实现加减

Vue 实现加减功能 在 Vue 中实现加减功能可以通过数据绑定和事件监听来完成。以下是一个简单的实现方法: 模板部分 <template> <div> <…