当前位置:首页 > VUE

vue实现table加分页

2026-02-21 07:21:41VUE

实现基础表格与分页

在Vue中实现表格分页功能,需要结合表格组件和分页组件。以下是使用Element UI的实现方式:

安装Element UI(如未安装):

npm install element-ui

引入Element UI并注册组件:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

表格组件实现

创建包含分页的表格组件模板:

vue实现table加分页

<template>
  <div>
    <el-table :data="currentTableData" border style="width: 100%">
      <el-table-column prop="date" label="日期"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="address" label="地址"></el-table-column>
    </el-table>

    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[5, 10, 20]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total">
    </el-pagination>
  </div>
</template>

分页逻辑实现

在脚本部分实现分页逻辑:

<script>
export default {
  data() {
    return {
      tableData: [], // 所有数据
      currentTableData: [], // 当前页显示数据
      currentPage: 1,
      pageSize: 5,
      total: 0
    }
  },
  created() {
    this.fetchData()
  },
  methods: {
    fetchData() {
      // 模拟API请求
      this.tableData = [
        { date: '2023-01-01', name: '张三', address: '北京' },
        { date: '2023-01-02', name: '李四', address: '上海' },
        // 更多数据...
      ]
      this.total = this.tableData.length
      this.updateCurrentTableData()
    },
    updateCurrentTableData() {
      const start = (this.currentPage - 1) * this.pageSize
      const end = start + this.pageSize
      this.currentTableData = this.tableData.slice(start, end)
    },
    handleSizeChange(val) {
      this.pageSize = val
      this.updateCurrentTableData()
    },
    handleCurrentChange(val) {
      this.currentPage = val
      this.updateCurrentTableData()
    }
  }
}
</script>

自定义样式调整

如需自定义分页样式,可以添加CSS:

vue实现table加分页

<style scoped>
.el-pagination {
  margin-top: 20px;
  text-align: right;
}
</style>

服务器端分页实现

对于大数据量情况,建议实现服务器端分页:

methods: {
  async fetchData() {
    try {
      const res = await axios.get('/api/data', {
        params: {
          page: this.currentPage,
          size: this.pageSize
        }
      })
      this.tableData = res.data.list
      this.total = res.data.total
    } catch (error) {
      console.error(error)
    }
  },
  handleSizeChange(val) {
    this.pageSize = val
    this.fetchData()
  },
  handleCurrentChange(val) {
    this.currentPage = val
    this.fetchData()
  }
}

性能优化建议

对于前端分页,当数据量较大时考虑虚拟滚动技术。可以使用第三方库如vue-virtual-scroller:

npm install vue-virtual-scroller

实现虚拟滚动表格:

<template>
  <RecycleScroller
    class="scroller"
    :items="tableData"
    :item-size="50"
    key-field="id">
    <template v-slot="{ item }">
      <div class="table-row">
        <div>{{ item.date }}</div>
        <div>{{ item.name }}</div>
        <div>{{ item.address }}</div>
      </div>
    </template>
  </RecycleScroller>
</template>

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

相关文章

vue实现自定义登录

vue实现自定义登录

实现自定义登录的基本步骤 在Vue中实现自定义登录功能通常需要结合前端和后端技术。以下是一个基本的实现流程: 创建登录表单组件 使用Vue的单文件组件创建一个登录表单,包含用户名和密码输入框以及提…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

实现简易vue

实现简易vue

实现简易 Vue 的核心思路 Vue 的核心功能包括数据响应式、模板编译和虚拟 DOM。以下是一个简易实现方案,涵盖核心功能模块。 数据响应式系统 通过 Object.definePropert…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…

vue实现radio

vue实现radio

Vue 实现 Radio 按钮 在 Vue 中实现 Radio 按钮可以通过 v-model 进行数据绑定,结合 input 元素的 type="radio" 属性。以下是一个基本示例: <t…