Vue3初学之Element-plus-table组件及分页

[复制链接]
发表于 2025-11-9 00:53:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
官方网址:https://element-plus.org/zh-CN/component/table.html

  • 安装 Element Plus
    npm install element-plus --save
  • 引入 Element Plus
    在 main.js 或 main.ts 文件中引入 Element Plus:
import ElementPlus from ‘element-plus’;
import ‘element-plus/dist/index.css’;
app.use(ElementPlus);
3.利用 el-table 组件
自界说列,比方添加操纵按钮



4. 编辑功能
允许用户直接在表格中编辑数据:
  1. <template>   <div class="container">
  2.         <el-table :data="tableData" style="width: 100%">
  3.           <el-table-column prop="date" label="日期" width="180">
  4.             <template #default="scope">
  5.               <el-input v-if="scope.row._edit" v-model="scope.row.date" />
  6.               <span v-else>{{ scope.row.date }}</span>
  7.             </template>
  8.           </el-table-column>
  9.           <el-table-column prop="name" label="姓名" width="180">
  10.             <template #default="scope">
  11.               <el-input v-if="scope.row._edit" v-model="scope.row.name" />
  12.               <span v-else>{{ scope.row.name }}</span>
  13.             </template>
  14.           </el-table-column>
  15.           <el-table-column prop="address" label="地址">
  16.             <template #default="scope">
  17.               <el-input v-if="scope.row._edit" v-model="scope.row.address" />
  18.               <span v-else>{{ scope.row.address }}</span>
  19.             </template>
  20.           </el-table-column>
  21.           <el-table-column label="操作" width="180">
  22.             <template #default="scope">
  23.               <div v-if="scope.row._edit">
  24.                 <el-button type="primary" @click="handleSave(scope)">保存</el-button>
  25.                 <el-button @click="handleCancel(scope)">取消</el-button>
  26.               </div>
  27.               <el-button v-else type="primary" @click="handleEdit(scope)">编辑</el-button>
  28.             </template>
  29.           </el-table-column>
  30.         </el-table>   </div> </template>
  31.    
  32.     <script setup> import { ref } from 'vue';
  33.    
  34.     const tableData = ref([   {
  35.         date: '2016-05-02',
  36.         name: '张三',
  37.         address: '上海市普陀区金沙江路 1518 弄',
  38.         _edit: false,   },   {
  39.         date: '2016-05-04',
  40.         name: '李四',
  41.         address: '上海市普陀区金沙江路 1517 弄',
  42.         _edit: false,   },   {
  43.         date: '2016-05-01',
  44.         name: '王五',
  45.         address: '上海市普陀区金沙江路 1519 弄',
  46.         _edit: false,   },   {
  47.         date: '2016-05-03',
  48.         name: '赵六',
  49.         address: '上海市普陀区金沙江路 1516 弄',
  50.         _edit: false,   }, ]);
  51.    
  52.     const handleEdit = (scope) => {   scope.row._edit = true; };
  53.    
  54.     const handleSave = (scope) => {   scope.row._edit = false;  
  55.     console.log('保存', scope.row); };
  56.    
  57.     const handleCancel = (scope) => {   scope.row._edit = false; };
  58.     </script>
复制代码
5.利用 el-pagination 组件
与el-table组合
  1. <template>
  2.   <div class="container">
  3.     <el-table :data="tableData" style="width: 100%">
  4.       <el-table-column prop="date" label="日期" width="180" />
  5.       <el-table-column prop="name" label="姓名" width="180" />
  6.       <el-table-column prop="address" label="地址" />
  7.     </el-table>
  8.     <el-pagination
  9.       :current-page="currentPage"
  10.       :page-sizes="[10, 20, 50, 100]"
  11.       :page-size="pageSize"
  12.       layout="total, sizes, prev, pager, next, jumper"
  13.       :total="total"
  14.       @size-change="handleSizeChange"
  15.       @current-change="handleCurrentChange"
  16.     />
  17.   </div>
  18. </template>
  19. <script setup>
  20. import { ref } from 'vue';
  21. const tableData = ref([
  22.   // 初始数据
  23. ]);
  24. const currentPage = ref(1);
  25. const pageSize = ref(10);
  26. const total = ref(100);
  27. const handleSizeChange = (newSize) => {
  28.   pageSize.value = newSize;
  29.   fetchTableData();
  30. };
  31. const handleCurrentChange = (newPage) => {
  32.   currentPage.value = newPage;
  33.   fetchTableData();
  34. };
  35. const fetchTableData = () => {
  36.   // 模拟数据请求
  37.   const start = (currentPage.value - 1) * pageSize.value;
  38.   const end = start + pageSize.value;
  39.   tableData.value = data.slice(start, end);
  40. };
  41. const data = [
  42.   // 你的完整数据
  43.   {
  44.     date: '2016-05-02',
  45.     name: '张三',
  46.     address: '上海市普陀区金沙江路 1518 弄',
  47.   },
  48.       {
  49.     date: '2016-05-02',
  50.     name: '张三',
  51.     address: '上海市普陀区金沙江路 1518 弄',
  52.   },
  53.       {
  54.     date: '2016-05-02',
  55.     name: '张三',
  56.     address: '上海市普陀区金沙江路 1518 弄',
  57.   },
  58.       {
  59.     date: '2016-05-02',
  60.     name: '张三',
  61.     address: '上海市普陀区金沙江路 1518 弄',
  62.   },
  63.       {
  64.     date: '2016-05-02',
  65.     name: '张三',
  66.     address: '上海市普陀区金沙江路 1518 弄',
  67.   },
  68.       {
  69.     date: '2016-05-02',
  70.     name: '张三',
  71.     address: '上海市普陀区金沙江路 1518 弄',
  72.   },
  73.       {
  74.     date: '2016-05-02',
  75.     name: '张三',
  76.     address: '上海市普陀区金沙江路 1518 弄',
  77.   },
  78.       {
  79.     date: '2016-05-02',
  80.     name: '张三',
  81.     address: '上海市普陀区金沙江路 1518 弄',
  82.   },
  83.       {
  84.     date: '2016-05-02',
  85.     name: '张三',
  86.     address: '上海市普陀区金沙江路 1518 弄',
  87.   },  {
  88.     date: '2016-05-02',
  89.     name: '张三',
  90.     address: '上海市普陀区金沙江路 1518 弄',
  91.   },
  92.    
  93.   {
  94.     date: '2016-05-04',
  95.     name: '李四',
  96.     address: '上海市普陀区金沙江路 1517 弄',
  97.   },
  98. ];
  99. </script>
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表