当前位置:首页 > VUE

vue表格的实现

2026-02-19 18:38:40VUE

Vue 表格的实现方法

基础表格实现

使用 el-table 组件可以快速实现基础表格功能。需要定义 datacolumns 数据,通过 v-for 渲染表格内容。

<template>
  <el-table :data="tableData">
    <el-table-column prop="name" label="姓名"></el-table-column>
    <el-table-column prop="age" label="年龄"></el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 22 }
      ]
    }
  }
}
</script>

动态列渲染

当列数不确定时,可以使用 v-for 动态渲染列。这种方法适合从后端获取列配置的场景。

<template>
  <el-table :data="tableData">
    <el-table-column 
      v-for="col in columns" 
      :key="col.prop"
      :prop="col.prop" 
      :label="col.label">
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      columns: [
        { prop: 'name', label: '姓名' },
        { prop: 'age', label: '年龄' }
      ],
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 22 }
      ]
    }
  }
}
</script>

表格分页功能

结合 el-pagination 组件实现分页功能。需要处理 current-change 事件来更新表格数据。

vue表格的实现

<template>
  <div>
    <el-table :data="currentTableData">
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="age" label="年龄"></el-table-column>
    </el-table>
    <el-pagination
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="total">
    </el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 22 },
        // 更多数据...
      ],
      currentPage: 1,
      pageSize: 10,
      total: 100
    }
  },
  computed: {
    currentTableData() {
      const start = (this.currentPage - 1) * this.pageSize
      return this.tableData.slice(start, start + this.pageSize)
    }
  },
  methods: {
    handleCurrentChange(val) {
      this.currentPage = val
      // 这里通常需要调用API获取新页数据
    }
  }
}
</script>

表格排序功能

通过设置 sortable 属性启用列排序。可以监听 sort-change 事件处理排序逻辑。

<template>
  <el-table 
    :data="tableData" 
    @sort-change="handleSortChange">
    <el-table-column 
      prop="name" 
      label="姓名" 
      sortable>
    </el-table-column>
    <el-table-column 
      prop="age" 
      label="年龄" 
      sortable>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', age: 20 },
        { name: '李四', age: 22 }
      ]
    }
  },
  methods: {
    handleSortChange({ prop, order }) {
      // 根据prop和order处理排序逻辑
      this.tableData.sort((a, b) => {
        if (order === 'ascending') {
          return a[prop] - b[prop]
        } else {
          return b[prop] - a[prop]
        }
      })
    }
  }
}
</script>

表格筛选功能

使用 filters 属性定义筛选选项,通过 filter-method 指定筛选方法。

vue表格的实现

<template>
  <el-table 
    :data="tableData" 
    :default-filtered-value="filterValue">
    <el-table-column 
      prop="gender" 
      label="性别"
      :filters="[
        { text: '男', value: 'male' },
        { text: '女', value: 'female' }
      ]"
      :filter-method="filterHandler">
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { name: '张三', gender: 'male' },
        { name: '李四', gender: 'female' }
      ],
      filterValue: ['male'] // 默认筛选男性
    }
  },
  methods: {
    filterHandler(value, row) {
      return row.gender === value
    }
  }
}
</script>

自定义表格内容

通过插槽可以自定义表格单元格内容,实现更复杂的展示效果。

<template>
  <el-table :data="tableData">
    <el-table-column label="操作">
      <template #default="scope">
        <el-button @click="handleEdit(scope.row)">编辑</el-button>
        <el-button @click="handleDelete(scope.row)">删除</el-button>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { id: 1, name: '张三' },
        { id: 2, name: '李四' }
      ]
    }
  },
  methods: {
    handleEdit(row) {
      console.log('编辑', row)
    },
    handleDelete(row) {
      console.log('删除', row)
    }
  }
}
</script>

表格行样式定制

通过 row-class-name 属性可以为特定行添加自定义样式。

<template>
  <el-table 
    :data="tableData" 
    :row-class-name="tableRowClassName">
    <!-- 列定义 -->
  </el-table>
</template>

<script>
export default {
  methods: {
    tableRowClassName({ row }) {
      if (row.age > 20) {
        return 'warning-row'
      }
      return ''
    }
  }
}
</script>

<style>
.el-table .warning-row {
  background-color: #fff8e6;
}
</style>

表格性能优化

对于大数据量表格,可以使用虚拟滚动提升性能。Element Plus 提供了 virtual-scroll 功能。

<template>
  <el-table 
    :data="tableData" 
    height="500"
    virtual-scroll>
    <!-- 列定义 -->
  </el-table>
</template>

标签: 表格vue
分享给朋友:

相关文章

vue实现目录

vue实现目录

Vue 实现目录功能 在 Vue 中实现目录功能通常需要动态生成目录结构,并支持点击跳转到对应内容区域。以下是几种常见实现方式: 基于滚动监听和动态生成 安装依赖(如需): npm inst…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组…

vue实现旋转

vue实现旋转

Vue 实现旋转效果的方法 在 Vue 中实现旋转效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画 通过 Vue 的 :class 或 :style 绑定 CSS 动画实现旋转效…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &l…

vue实现管道

vue实现管道

Vue 中实现管道(Pipe)功能 在 Vue 中可以通过过滤器(Filters)或计算属性(Computed Properties)实现类似管道的功能,将数据经过多个处理步骤后输出。 使用过滤器…

vue实现报表

vue实现报表

vue实现报表的方法 使用Vue实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…