当前位置:首页 > 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,可以结合其分页组件实现前端分页展示。

vue实现分页请求

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

实现服务器端分页

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

vue实现分页请求

// 后端接口示例(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)
  }
}

防抖优化请求

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

import { debounce } from 'lodash'

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

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

相关文章

前端vue登录功能实现

前端vue登录功能实现

Vue 登录功能实现步骤 创建登录表单组件 在 Vue 项目中创建一个登录组件,通常命名为 Login.vue。该组件包含用户名和密码输入框以及提交按钮。 <template> &l…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…

vue实现数组

vue实现数组

Vue 实现数组操作的方法 在 Vue 中,数组的操作需要特别注意响应式的问题。Vue 提供了一些方法来确保数组的变动能够触发视图更新。 响应式数组方法 Vue 对以下数组方法进行了封装,确保它们能…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show 通过…