当前位置:首页 > VUE

vue实现分页请求

2026-03-30 02:36:42VUE

Vue 实现分页请求的方法

使用 axios 发送分页请求

在 Vue 中可以通过 axios 发送分页请求,后端接口通常需要传递页码和每页数量参数。

methods: {
  fetchData(page = 1, pageSize = 10) {
    axios.get('/api/data', {
      params: {
        page,
        pageSize
      }
    }).then(response => {
      this.dataList = response.data.list
      this.total = response.data.total
    })
  }
}

使用 Element UI 的分页组件

如果使用 Element UI,可以结合其分页组件实现前端分页展示。

<template>
  <div>
    <el-table :data="dataList">
      <!-- 表格列定义 -->
    </el-table>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[10, 20, 30, 50]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total">
    </el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      dataList: [],
      currentPage: 1,
      pageSize: 10,
      total: 0
    }
  },
  methods: {
    handleSizeChange(val) {
      this.pageSize = val
      this.fetchData()
    },
    handleCurrentChange(val) {
      this.currentPage = val
      this.fetchData()
    },
    fetchData() {
      // axios请求代码
    }
  },
  created() {
    this.fetchData()
  }
}
</script>

实现服务器端分页

对于大数据量情况,建议实现服务器端分页,减少前端数据处理压力。

// 后端接口示例(Node.js)
router.get('/api/data', async (req, res) => {
  const { page = 1, pageSize = 10 } = req.query
  const offset = (page - 1) * pageSize

  const data = await Model.findAndCountAll({
    limit: parseInt(pageSize),
    offset: offset
  })

  res.json({
    list: data.rows,
    total: data.count
  })
})

使用 Vuex 管理分页状态

在大型应用中,可以使用 Vuex 集中管理分页状态。

// store/modules/data.js
const state = {
  dataList: [],
  pagination: {
    page: 1,
    pageSize: 10,
    total: 0
  }
}

const mutations = {
  SET_DATA_LIST(state, payload) {
    state.dataList = payload.list
    state.pagination.total = payload.total
  },
  SET_PAGE(state, page) {
    state.pagination.page = page
  }
}

const actions = {
  async fetchData({ commit, state }) {
    const { page, pageSize } = state.pagination
    const response = await api.getData(page, pageSize)
    commit('SET_DATA_LIST', response.data)
  }
}

防抖优化请求

为防止频繁请求,可以对分页操作添加防抖处理。

vue实现分页请求

import { debounce } from 'lodash'

methods: {
  handleCurrentChange: debounce(function(page) {
    this.currentPage = page
    this.fetchData()
  }, 300)
}

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

相关文章

vue中实现显示和隐藏

vue中实现显示和隐藏

控制显示与隐藏的方法 在Vue中实现元素的显示和隐藏可以通过多种方式完成,以下是常见的几种方法: 1. 使用v-if指令v-if根据条件动态添加或移除DOM元素,适合需要频繁切换的场景。当条件为fa…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要跳…

vue实现一个tab栏

vue实现一个tab栏

Vue 实现 Tab 栏 基础实现(选项式 API) <template> <div class="tab-container"> <div class="t…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…

vue实现拖动

vue实现拖动

Vue实现拖动的常用方法 在Vue中实现拖动功能通常需要结合HTML5的拖放API或第三方库。以下是几种常见实现方式: 使用HTML5原生拖放API HTML5提供了原生拖放API,可以通过drag…

vue实现dag

vue实现dag

Vue实现DAG(有向无环图) 在Vue中实现DAG(Directed Acyclic Graph,有向无环图)通常涉及数据结构的建模、可视化渲染以及交互逻辑处理。以下是关键实现步骤和示例代码: 数…