分页+elementUI的table分页多选

本文介绍如何在Vue项目中结合ElementUI实现后端分页和表格多选功能。通过设置分页参数并监听页码变化,从Node.js后端获取对应数据。同时,利用`row-key`和`reserve-selection`属性实现表格多选并保持选中状态。详细代码和方法展示确保了功能的完整实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、分页

后端分页,我们只用把请求的页数和每页显示的记录条数发送到后端,后端根据这两个值做好分页,并返回给前端,前端根据得到的返回值渲染到页面上,结合elementUI,如果要支持 page-sizes 的更改,则需要使用 total 属性,双向绑定数据总条数,elementUI根据page-size属性值和后端返回的总条数自动计算总页数。部分代码如下:

HTML:

<!-- 
    1. @current-change:改变当前页时触发
    2. current-page:当前页
    3. hide-on-single-page:只有一页时是否影藏页码
    4. total:数据的总条数
    5. page-sizes:每页显示的数据条数
-->
    <el-pagination
        background
        layout="prev, pager, next"
        :total="totalSize"    //总记录条数
        @current-change="changePage"
        :current-page="Number(page.nowPage)"    //当前页码
        :page-size="page.pagesize"    //每页显示的记录条数
        :hide-on-single-page="true"    //当页码只有一页时是否影藏页码
    >
    </el-pagination>

 JS:

export default {
    data() {
        return {
            queryInfo: { s4_name: "" }, //查询数据
            // 页码数据
            totalSize: 0,
            page: {
                nowPage: 1,
                pagesize: 5,
            },
        };
    },
    mounted() {
        this.getS4();
    },
    methods: {
        // 获取
        getS4() {
            this.$axios({
                method: "get",
                url: this.$api.content.getstore4S,   //自己的请求地址
                params: {
                    s4_name: this.queryInfo.s4_name, //搜索框中的值
                    pageIndex: (this.page.nowPage - 1) * this.page.pagesize, //当前页第一条记录下标
                    pagesize: this.page.pagesize, //每页返回记录条数
                },
                headers: {
                    "Content-type": "application/json",
                },
            }).then((resp) => {
                this.totalSize = resp.data.num;
            });
        },
        // 分页
        changePage(val) {
            // 改变当前页
            this.page.nowPage = val;
            this.getS4();
        },
    },
};

 Node.js:

//用async await做了异步处理
async getStore4S(req, resp) {
        let { s4_name, pageIndex, pagesize } = req.query;
        let arr1 = []; //获取个数
        let arr2 = []; //获取数据
        let sql1 = 'select count(*) as num from t_s4 where 1=1'
        let sql2 = 'select *,bra_name,reg_name from t_s4,t_car_brand,t_region where bra_id=fk_brand_id and reg_id=fk_region_id';
        if (s4_name) {
            sql1 = sql1 + ' and s4_name like ?'
            sql2 = sql2 + ' and s4_name like ? limit ?,?'
            arr1 = [`%${s4_name}%`]
            arr2 = [`%${s4_name}%`, Number(pageIndex), Number(pagesize)]  //注意 pageIndex 和 pagesize 是什么类型的,如果不是数字类型记得将之转换成数字类型,否则会出错
        } else {
            sql2 = sql2 + ' limit ?,?';
            arr2 = [Number(pageIndex), Number(pagesize)] 
        }
        let totalData = await new Promise((resolve, reject) => {
            db(sql2, arr2, function(err, data) {
                if (!err) {
                    resolve(data)
                } else {
                    reject(err)
                }
            })
        })
        db(sql1, arr1, function(err, data) {
            if (!err) {
                resp.send({
                    code: 200,
                    num: data[0].num,
                    totalData
                })
            } else {
                console.log(err);
                resp.send({
                    code: 500,
                    message: '数据库操作失败'
                })
            }
        })
    },

二、elementUI的table分页多选

        1. 设置

            :row-key="getRowKeys"

        2. 在复选框上增加属性

            :reserve-selection="true"

         

        3. methods方法中将数据放到自定义数组中,记得在data中定义一下

        

         

        4. 定义getRowKeys方法

         

        原文:elementUI的table分页多选,记住上一页并勾选中,:row-key的使用方法 - 吃的快不吐骨头 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值