Vue+ElementUI 可变列表格(Table)(为什么超出了,也不显示横向滚动条)

什么叫可变列表格?

顾名思义,就是Table的Column的数量是可变的,可能是3个、4个,或者5个。

如下图:


image.png

image.png

那么,可变列列表的应用场景是什么?

通常,在开发的过程中,总是会遇到在一个列表中根据不同的用户角色和业务场景,展示不同的内容给用户看的需求。

这个时候,我们的可变列表格就有登场的机会了。

当然,你也可以通过v-if控制显示的列。

但是,我觉得用可变列表格的方式可以更灵活、省事。

不仅是这种情况,在所有的需要表格的列的数量不固定的情景中都可以用,比如数据列表模板什么的。

怎么实现可变列表格?或者说具体思路是怎么样的?

1、我们先提出一个设想,在element中,table是由很多个el-table-column构成的,那么我们可不可以通过循环el-table-column构造一个table?

2、要循环el-table-column,那么我们就需要一个由多个列组成的集合,他有3个字段,分别是列名、列显示文本和列宽,如下

        tableCols1: [
                   {
                       name: "date",
                       label: "日期",
                       width: 180
                   },
                   {
                       name: "name",
                       label: "姓名",
                       width: 180
                   },
                   {
                       name: "address",
                       label: "地址",
                       width: 280
                   },
               ]

3、利用v-for循环列集合,构造列表,把name、label、width绑定到el-table-column

   <el-table v-bind:data="tableData1" style="width: 100%" v-bind:row-class-name="tableRowClassName" border>
     <el-table-column v-for="item in tableCols1"
                                 v-bind:prop="item.name"
                                 v-bind:label="item.label"
                                 v-bind:width="item.width">
    </el-table-column>
            </el-table>

4、绑定数据

  tableData1: [{
                   date: '2016-05-02',
                   name: '王小虎',
                   address: '上海市普陀区金沙江路 1518 弄'
               }, {
                   date: '2016-05-04',
                   name: '王小虎',
                   address: '上海市普陀区金沙江路 1517 弄'
               }, {
                   date: '2016-05-01',
                   name: '王小虎',
                   address: '上海市普陀区金沙江路 1519 弄'
               }, {
                   date: '2016-05-03',
                   name: '王小虎',
                   address: '上海市普陀区金沙江路 1516 弄'
               }]

5、可变列表格就此完成,效果如下

image.png

全部代码,粘上去就可以看效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <!-- import CSS -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <style>
        .el-table .warning-row {
            background: oldlace;
        }
 
        .el-table .success-row {
            background: #f0f9eb;
        }
    </style>
</head>
<body>
    <div id="app">
        <template>
            <el-table v-bind:data="tableData1" style="width: 100%" v-bind:row-class-name="tableRowClassName" border>
                <el-table-column v-for="item in tableCols1"
                                 v-bind:prop="item.name"
                                 v-bind:label="item.label"
                                 v-bind:width="item.width">
                </el-table-column>
            </el-table>
            <br /><br />
            <el-table v-bind:data="tableData2" style="width: 100%" v-bind:row-class-name="tableRowClassName" border>
                <el-table-column v-for="item in tableCols2"
                                 v-bind:prop="item.name"
                                 v-bind:label="item.label"
                                 v-bind:width="item.width">
                </el-table-column>
            </el-table>
        </template>
    </div>
</body>
<script src="~/scripts/jquery-1.10.2.js"></script>
<!-- import Vue before Element -->
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
    new Vue({
        el: '#app',
        data: function () {
            return {
                tableData1: [{
                    date: '2016-05-02',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1518 弄'
                }, {
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1517 弄'
                }, {
                    date: '2016-05-01',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1519 弄'
                }, {
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1516 弄'
                }],
                tableCols1: [
                    {
                        name: "date",
                        label: "日期",
                        width: 180
                    },
                    {
                        name: "name",
                        label: "姓名",
                        width: 180
                    },
                    {
                        name: "address",
                        label: "地址",
                        width: 280
                    },
                ],
                tableData2: [{
                    num: 1,
                    date: '2016-05-02',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1518 弄'
                }, {
                    num: 2,
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1517 弄'
                }, {
                    num: 3,
                    date: '2016-05-01',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1519 弄'
                }, {
                    num: 4,
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀区金沙江路 1516 弄'
                }],
                tableCols2: [
                    {
                        name: "num",
                        label: "#",
                        width: 80
                    },
                    {
                        name: "date",
                        label: "日期",
                        width: 180
                    },
                    {
                        name: "name",
                        label: "姓名",
                        width: 180
                    },
                    {
                        name: "address",
                        label: "地址",
                        width: 280
                    }
                ]
            }
        },
        methods: {
            tableRowClassName: function (obj) {
                if (obj.rowIndex % 2 == 0) {
                    return 'warning-row';
                } else {
                    return 'success-row';
                }
                return '';
            }
        }
    });
</script>
</html>

效果图


image.png

原文链接:https://blog.csdn.net/u012835032/article/details/108935788

仿照博主的代码写了一个vue版本

  <div>
    <el-table :data="tableData" style="width: 100%"  v-loading="loading" :row-class-name="tableRowClassName" size="small" height="430px" border stripe>
     <el-table-column v-for="(item,i) in tableColumns" :key= i :prop="item.name" :label="item.label" :width="item.width" />
    </el-table>
  </div>

上述代码存在两个问题

1、查询出的结果是多条的时候有横向滚动条,当查询出的数据只有一条时,横向滚动条不出现。

解决方案

直接在<el-table>标签上的<div> 标签上固定宽度,注意这个值要设置的大一些

  <div style="width: 1500px">
2、使用height="430px" 当数据只有一条时,会有很大空白

如图:


image.png

解决方案
给<el-table> 标签上的height="430px" 换成max-height="430px" 这样表格就能根据返回数据的多少自动定位了。

   <div style="width: 1500px">
      <el-table :data="tableData" style="width: 100%"  v-loading="loading" :row-class-name="tableRowClassName" size="small" max-height="430px" border stripe>
         <el-table-column v-for="(item,i) in tableColumns" :key= i :prop="item.name" :label="item.label" :width="item.width" />
      </el-table>
    </div>

改完之后


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容