el-table分页展示数据

一次请求将全部要展示的数据获取到,分页在前端对数据进行处理进行分页展示

<el-table
    :data="handleList.slice((currentPage-1)*pageSize,currentPage*pageSize)"
    :show-header="true"
    :height="$store.state.clientHeight - 134"
    :header-cell-style="tableHeaderStyle"
    style="width: 100%; overflow-y: auto;"
    >
    <el-table-column
        prop="index"
        label="序号"
        width="100"
        align="center">
    </el-table-column>
    <el-table-column
        prop="name"
        label="应用名称"
        align="center">
    </el-table-column>
    <el-table-column
        prop="person"
        label="操作人"
        align="center">
    </el-table-column>
    <el-table-column
        prop="time"
        label="操作时间"
        align="center"
        >
    </el-table-column>
    <el-table-column
        prop="type"
        label="操作类型"
        align="center">
    </el-table-column>
    <el-table-column
        prop="result"
        label="执行结果"
        align="center">
    </el-table-column>
</el-table>
<el-pagination
    @size-change="handleSizeChange"
    @current-change="handleCurrentChange"
    :current-page="currentPage"
    :page-sizes="[10, 20, 30, 50, 100]"
    :page-size="pageSize"
    layout="total, sizes, prev, pager, next, jumper"
    :total="handleList.length">
</el-pagination>
<script>
    export default({
        data() {
            return {
                handleList: [],
                // 当前页
                currentPage: 1,
                // 每页多少条
                pageSize: 10
            }
        },
        mounted() {
            this.$http.get('/json/handle.json')
                .then(({data}) => {
                    if (data.status === 200) {
                        this.handleList = data.data;
                    }else{
                        console.log('没有获取到数据')
                    }
                })
                .catch((err) => {
                    console.log('获取数据出错', err)
                });
        },
        methods: {
            // 每页多少条
            handleSizeChange(val) {
                this.pageSize = val;
            },
            // 当前页
            handleCurrentChange(val) {
                this.currentPage = val;
            }
        }
    })
</script>

结果:

第1页:

123

第2页:

1234

 

<think>我们正在处理用户的问题:在使用Element UI的el-table组件时,在分页情况下如何获取选中的数据。 根据提供的引用,关键点在于使用`reserve-selection`属性和`row-key`属性来记住分页时选中的状态,并且能够获取到所有选中的数据(包括跨页选中的数据)。 步骤: 1. 在el-table上设置`row-key`属性,该属性需要绑定一个返回唯一标识的函数或直接指定一个唯一字段(如id)。这样每一行数据都有一个唯一的key。 2. 在type为selection的列上设置`:reserve-selection="true"`,这样在分页切换时,之前选中的数据会被记住。 3. 通过`@selection-change`事件来获取当前页选中的数据变化,但是注意,这个事件只触发当前页的选中变化。我们需要维护一个所有选中数据的数组。 4. 实际上,由于设置了`reserve-selection`,el-table内部会维护一个跨页的选中状态。我们可以通过ref获取到table组件,然后使用`this.$refs.multipleTable.selection`来获取所有选中的数据(包括跨页的)。但是,根据引用[3],我们可以通过`handleSelectionChange`事件来获取选中的数组,这个数组在跨页时也会包含之前选中的数据(因为reserve-selection为true时,selection-change事件会返回所有选中的数据,而不仅仅是当前页)。 然而,注意引用[2]和[3]中的示例,都是通过`handleSelectionChange`事件来获取选中的数据。当用户切换分页时,由于之前选中的数据被记住,所以当再次回到该页时,选中状态还在。同时,`selection-change`事件会在每次选中状态改变时触发,并返回当前所有选中的数据(包括跨页的)。 因此,我们可以这样做: -el-table上绑定`@selection-change="handleSelectionChange"`,在这个事件处理函数中,我们用一个数组(比如`selectedData`)来保存所有选中的数据- 注意:这个事件在每次选中或取消选中一行时触发,参数就是当前所有选中的数据(跨页的)。 但是,根据引用[3]中的代码: handleSelectionChange(selected) { console.log('选中的数据list---', selected) } 这里selected就是所有选中的数据。 所以,我们不需要自己维护一个数组,因为el-table内部已经维护了,我们只需要在需要的时候(比如点击提交按钮)通过ref获取或者直接在`handleSelectionChange`中更新一个数组即可。 具体实现步骤: 1. 模板部分: ```html <el-table ref="multipleTable" :data="tableData" @selection-change="handleSelectionChange" :row-key="getRowKey" border > <el-table-column type="selection" :reserve-selection="true" width="55"> </el-table-column> <!-- 其他列 --> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> ``` 2. 在data中定义: ```javascript data() { return { tableData: [], // 当前页数据 total: 0, // 总条数 pageSize: 10, // 每页条数 currentPage: 1, // 当前页码 selectedData: [] // 选中的数据 } } ``` 3. 方法部分: ```javascript methods: { // 设置row-key,返回行的唯一标识 getRowKey(row) { return row.id; // 假设数据中有一个唯一字段id }, // 当选择项发生变化时会触发该事件 handleSelectionChange(selected) { // selected参数就是当前所有选中的数据(跨页的) this.selectedData = selected; }, // 分页相关方法 handleSizeChange(val) { this.pageSize = val; this.currentPage = 1; this.getTableData(); // 重新获取数据 }, handleCurrentChange(val) { this.currentPage = val; this.getTableData(); // 重新获取数据 }, // 获取表格数据的方法 getTableData() { // 根据currentPage和pageSize请求数据 // 请求成功后,设置tableData和total } } ``` 4. 当需要获取选中的所有数据时,可以直接使用`this.selectedData`。 注意:在切换分页时,由于设置了`reserve-selection`,之前选中的数据会被记住。同时,每次选中或取消选中都会触发`handleSelectionChange`,所以`selectedData`始终是最新的。 另外,引用[4]也提到,设置`row-key`和`reserve-selection`为true是关键。 因此,用户可以通过上述方式在分页状态下获取选中的数据。 生成相关问题: 1. 如何清除el-table中跨页选中的数据? 2. 在el-table分页多选时,如何实现默认选中某些行? 3. 使用reserve-selection属性时需要注意哪些问题?</think>在使用 Element UI 的 `el-table` 组件时,实现分页状态下获取所有选中行数据(包括跨页选择)的关键在于使用 `row-key` 和 `reserve-selection` 属性。以下是具体实现方案: ### 解决方案 ```html <template> <div> <!-- 关键配置 --> <el-table ref="multipleTable" :data="tableData" :row-key="getRowKey" <!-- 设置唯一标识 --> @selection-change="handleSelectionChange" > <el-table-column type="selection" :reserve-selection="true" <!-- 开启跨页记忆 --> width="55" ></el-table-column> <!-- 其他列 --> </el-table> <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" :total="total" ></el-pagination> <el-button @click="getSelected">获取选中数据</el-button> </div> </template> <script> export default { data() { return { tableData: [], // 当前页数据 currentPage: 1, // 当前页码 pageSize: 10, // 每页条数 total: 0, // 总数据量 selectedRows: [] // 存储所有选中数据 }; }, methods: { // 关键1: 设置行唯一标识 getRowKey(row) { return row.id; // 使用唯一字段如ID }, // 关键2: 处理选择变化 handleSelectionChange(selected) { // 注意:selected 包含所有选中数据(跨页) this.selectedRows = selected; }, // 关键3: 分页切换时重置选择状态 handlePageChange(page) { this.currentPage = page; this.fetchData(); }, // 获取数据方法 fetchData() { // 模拟API请求 yourApi.getList({ page: this.currentPage, size: this.pageSize }) .then(res => { this.tableData = res.data; this.total = res.total; }); }, // 获取所有选中数据 getSelected() { console.log("所有选中数据:", this.selectedRows); // 或通过ref获取:this.$refs.multipleTable.selection } }, mounted() { this.fetchData(); } }; </script> ``` ### 核心原理说明 1. **`row-key` 属性** 为每行数据指定唯一标识(如ID),确保跨页时能正确识别相同数据行: ```javascript :row-key="row => row.id" ``` 2. **`reserve-selection` 属性** 在 `el-table-column` 中启用跨页选择记忆功能: ```html <el-table-column type="selection" :reserve-selection="true" /> ``` 3. **`selection-change` 事件** 自动返回 **所有选中数据(含跨页数据)**: ```javascript @selection-change="selected => this.selectedRows = selected" ``` ### 注意事项 1. **数据唯一性** 必须确保 `row-key` 绑定的字段(如ID)在全部数据中唯一,否则会导致选择状态混乱。 2. **数据刷新
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值