elementui el-table简单封装 含分页
在Vue.js中使用Element UI时,可以通过组合或者继承来封装一个带有分页的el-table
组件。以下是一个简单的封装例子:
<template>
<div>
<el-table :data="pagedData">
<!-- 表格列 -->
<el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label">
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
<script>
export default {
props: {
data: Array,
columns: Array
},
data() {
return {
currentPage: 1,
pageSize: 10
};
},
computed: {
total() {
return this.data.length;
},
pagedData() {
const start = (this.currentPage - 1) * this.pageSize;
const end = start + this.pageSize;
return this.data.slice(start, end);
}
},
methods: {
handleSizeChange(val) {
this.pageSize = val;
},
handleCurrentChange(val) {
this.currentPage = val;
}
}
};
</script>
使用该组件时,你需要传入data
(表格数据)和columns
(表格列定义)作为props。计算属性pagedData
负责处理当前页的数据,并且根据currentPage
和pageSize
来切分数组。el-pagination
组件则用于控制分页,并且与计算属性和方法一起工作,以便在用户更改页面大小或页码时更新数据。
在父组件中,你可以这样使用封装好的PaginationTable
组件:
<template>
<pagination-table :data="tableData" :columns="tableColumns"></pagination-table>
</template>
<script>
import PaginationTable from './PaginationTable.vue';
export default {
components: {
PaginationTable
},
data() {
return {
tableData: [
// 数据项
],
tableColumns: [
// 列定义
]
};
}
};
</script>
这样,你就可以在父组件中使用PaginationTable
组件,并通过props传递数据和列配置,实现了一个带有分页功能的表格组件。
评论已关闭