Vue+ElementUI 可變列表格(Table)(為什么超出了,也不顯示橫向滾動(dòng)條)

什么叫可變列表格?

顧名思義,就是Table的Column的數(shù)量是可變的,可能是3個(gè)、4個(gè),或者5個(gè)。

如下圖:


image.png

image.png

那么,可變列列表的應(yīng)用場(chǎng)景是什么?

通常,在開發(fā)的過程中,總是會(huì)遇到在一個(gè)列表中根據(jù)不同的用戶角色和業(yè)務(wù)場(chǎng)景,展示不同的內(nèi)容給用戶看的需求。

這個(gè)時(shí)候,我們的可變列表格就有登場(chǎng)的機(jī)會(huì)了。

當(dāng)然,你也可以通過v-if控制顯示的列。

但是,我覺得用可變列表格的方式可以更靈活、省事。

不僅是這種情況,在所有的需要表格的列的數(shù)量不固定的情景中都可以用,比如數(shù)據(jù)列表模板什么的。

怎么實(shí)現(xiàn)可變列表格?或者說具體思路是怎么樣的?

1、我們先提出一個(gè)設(shè)想,在element中,table是由很多個(gè)el-table-column構(gòu)成的,那么我們可不可以通過循環(huán)el-table-column構(gòu)造一個(gè)table?

2、要循環(huán)el-table-column,那么我們就需要一個(gè)由多個(gè)列組成的集合,他有3個(gè)字段,分別是列名、列顯示文本和列寬,如下

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

3、利用v-for循環(huán)列集合,構(gòu)造列表,把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、綁定數(shù)據(jù)

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

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

image.png

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

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <!-- import CSS -->
    <link rel="stylesheet" >
    <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: '上海市普陀區(qū)金沙江路 1518 弄'
                }, {
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀區(qū)金沙江路 1517 弄'
                }, {
                    date: '2016-05-01',
                    name: '王小虎',
                    address: '上海市普陀區(qū)金沙江路 1519 弄'
                }, {
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀區(qū)金沙江路 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: '上海市普陀區(qū)金沙江路 1518 弄'
                }, {
                    num: 2,
                    date: '2016-05-04',
                    name: '王小虎',
                    address: '上海市普陀區(qū)金沙江路 1517 弄'
                }, {
                    num: 3,
                    date: '2016-05-01',
                    name: '王小虎',
                    address: '上海市普陀區(qū)金沙江路 1519 弄'
                }, {
                    num: 4,
                    date: '2016-05-03',
                    name: '王小虎',
                    address: '上海市普陀區(qū)金沙江路 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

仿照博主的代碼寫了一個(gè)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>

上述代碼存在兩個(gè)問題

1、查詢出的結(jié)果是多條的時(shí)候有橫向滾動(dòng)條,當(dāng)查詢出的數(shù)據(jù)只有一條時(shí),橫向滾動(dòng)條不出現(xiàn)。

解決方案

直接在<el-table>標(biāo)簽上的<div> 標(biāo)簽上固定寬度,注意這個(gè)值要設(shè)置的大一些

  <div style="width: 1500px">
2、使用height="430px" 當(dāng)數(shù)據(jù)只有一條時(shí),會(huì)有很大空白

如圖:


image.png

解決方案
給<el-table> 標(biāo)簽上的height="430px" 換成max-height="430px" 這樣表格就能根據(jù)返回?cái)?shù)據(jù)的多少自動(dòng)定位了。

   <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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容