继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

element 表格组件自适应 思路

纯情掉了一地
关注TA
已关注
手记 33
粉丝 30
获赞 84

项目涉及大量表格 很多时候会采用估算和手动调试的方式来设置 column 宽度不太恰当,所以尝试实现自适应。 核心是对数据层进行修改,代码提供参考。

        let column = [
            {label:"用户id",prop:"userId"},
            {label:"用户姓名",prop:"userName"},
            {label:"创建日期",prop:"createData"},
        ]
        let data = [
            {
                userId:1,
                userName:"张三",
                createData:'2020-05-26 12:10:56'
            },
            {
                userId:2,
                userName:"李狗蛋",
                createData:'2020-05-26 12:10:56'
            }
        ]
        let resolveColumn = _cmptWidth(column,data) 
        console.log(resolveColumn)
        // [
        //   {label:"用户id",prop:"userId",width:"120px"},
        //   {label:"用户姓名",prop:"userName",width:"120px"},
        //   {label:"创建日期",prop:"createData",width:"120px"},
        // ]
        _cmptWidth(min=30,column,data){
            // 字段长度容器
            let temp={};

            // 根据第一行数据 初始化 字段长度容器
            Object.keys(data[0]).forEach(key=>{
                temp[key]=[]
            })

            // 将每一行数据的 字段长度 存入 字段长度容器 中文算做2个字符,英文1个
            data.map(i=>{
                Object.keys(i).forEach(key=>{
                    let str = i[key] && i[key].toString();
                    let cn = str && str.match(/[\u4e00-\u9fa5]/g)&&str.match(/[\u4e00-\u9fa5]/g).length||0
                    let en = str && str.match(/[A-Za-z0-9]/g)&&str.match(/[A-Za-z0-9]/g).length||0
                    let len =Math.max( en + cn*2 + ,10) ;
                    temp[key].push(Math.min(len,min))
                })
            })

            // 返回 添加列宽度属性的 column
            return column.map(i=>{
                let width = Math.ceil(temp[i.prop].reduce((a,b)=>a+b)/rows.length)
                return {
                    ...i,
                    width:width*12+'px'
                }
            })
        }
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP