vue table 使用el-table為行添加自定義背景色


簡介

本文主要介紹vue table 使用el-table為行添加自定義背景色。

概述

element-ui為開發(fā)者簡化了極大的前端開發(fā)工作当犯,但是過于強力的封裝,必然導(dǎo)致可自定義性質(zhì)的退化割疾,有時會為了一個小功能而花費更長的時間.
此篇介紹如何對element-ui 中的el-table 添加行自定義選中背景色和hover變色效果嚎卫。
效果圖

element-ui.jpg

需求由來

vue is very hot in developers recently, i want to learn it all the time.
one week ago, i rebuild my little partner with VUE and learn so much.
but one problem ocuur when i was happing for me ,
it just like a ball hit my head , lost too much time to fix it, so i must remark it today.

the way to fix

為了解決這個問題,在網(wǎng)上看了很多資料宏榕,但是都沒啥效果拓诸,所以還是看官方文檔,自己研究吧麻昼,功夫不負有心人奠支,DOWN IT!

nothing to say , but code first!

html code

> html 代碼
<div class="table-box">
        <el-table ref="multipleTable" :data="tableData" border tooltip-effect="dark" style="width: 100%; cursor: pointer;"
            @selection-change="handleSelectionChange"
            @row-click="rowClick"
            @select-all="selectAll"
            :row-class-name="tableRowClassName"
            @select="singleCheck">
            <el-table-column type="selection" label="全選"></el-table-column>
            <el-table-column prop="columnDesc" label="備注"></el-table-column>
            <el-table-column label="字段名" prop="columnDesc"></el-table-column>
            <el-table-column prop="name" label="操作">
                <template slot-scope="scope">
                    <div style="color: #3280d8;">clickMe</div>
                </template>
            </el-table-column>
        </el-table>
    </div>

data methods

JS代碼

export default {
        data() {
            return {
                tableData: [],
                multipleSelection: [],
                // 用于存放被選中行的index
                numbers: []
            }
        },
        methods: {
            toggleSelection(rows) {
                if (rows) {
                    rows.forEach((row) => {
                        // 再次調(diào)用toggleRowSelection則取消選中
                        this.$refs.multipleTable.toggleRowSelection(row);
                        if (this.numbers.indexOf(row.index) == -1) {
                            console.log("選中" + row.index)
                            this.numbers.push(row.index);
                        } else {
                            console.log("取消選中" + row.index)
                            this.numbers.splice(this.numbers.indexOf(row.index), 1);
                        }
                    })
                } else {
                    this.$refs.multipleTable.clearSelection()
                }
            },
            handleSelectionChange(val) {
                this.multipleSelection = val
            },
            // 單行checkbox選中觸發(fā)
            singleCheck(val, row) {
                let index = row.index;
                if (this.numbers.indexOf(index) == -1) {
                    console.log("選中" + index)
                    this.numbers.push(index);
                } else {
                    console.log("取消選中" + index)
                    this.numbers.splice(this.numbers.indexOf(index), 1);
                }
            },
            // 全選checkbox點擊時觸發(fā)
            selectAll(val, row) {
                // 判斷是否全選
                console.log(this.tableData.length + "-" + this.multipleSelection.length)
                if (this.multipleSelection.length >= this.tableData.length) {
                    // 表單綁定的數(shù)據(jù)
                    console.log("全選")
                    // 所有index放入數(shù)組中
                    this.tableData.forEach((item, i) => {
                        this.numbers.push(item.index);
                    });
                    this.$refs.multipleTable.toggleRowSelection(row);
                } else {
                    console.log("取消全選")
                    // 清空背景數(shù)組
                    this.numbers.splice(0)
                }
            },
            // 重置所有選中行
            resetSelect() {
                // 選中的需要取消選中
                if (this.numbers.length > 0) {
                    this.numbers.forEach(index => {
                        this.$refs.multipleTable.toggleRowSelection(this.tableData[index]);
                    })
                }
                // 清空數(shù)組
                this.numbers.splice(0)
            },
            // 行點擊事件
            rowClick(row) {
                let index = row.index;
                if (this.numbers.indexOf(index) == -1) {
                    console.log("選中" + index)
                    this.numbers.push(index);
                } else {
                    console.log("取消選中" + index)
                    this.numbers.splice(this.numbers.indexOf(index), 1);
                }
                // 再次點擊時抚芦,調(diào)用toggleRowSelection則取消選中
                this.$refs.multipleTable.toggleRowSelection(row);
            },
            /* 設(shè)置選中背景色 */
            tableRowClassName({row,rowIndex}) {
                // 為每行添加屬性index
                row.index = rowIndex;
                let color = "";
                this.numbers.forEach((r, i) => {
                    if (rowIndex === r) {
                        // 自定義class名稱倍谜,需要寫到全局element-ui 的scss文件中或者用scoped做穿透
                        // 本人穿透未成功迈螟,所以就沒用scoped
                        color = "myRowClass";
                    }
                });
                return color;
            }
        }
    }
</script>

css

css 代碼

/* 鼠標(biāo)上移 hover效果 */
.el-table--enable-row-hover .el-table__body tr:hover>td {
  background-color: #9198e5 !important;
  font-size: 18px !important;
}

/* 選中改變自定義背景色 */
.myRowClass {
    // background-color: yellow !important;
    // 設(shè)置漸變色
    background-image: linear-gradient(#4d33280a, #7f87e3) !important;
}

效果

單擊行時,行對應(yīng)checkbox選中尔崔,其背景色會改變;再次單擊會取消選中答毫,行背景色變回原來的顏色。
全選季春,單選效果和單擊行一樣洗搂。
以下是效果圖,已經(jīng)解決了全選/反選和單擊行的效果沖突

element-ui.jpg

總結(jié)

element-ui 很好用载弄,但同時喘批,如果要實現(xiàn)一些自定義功能還需要仔細去研究組件源碼特咆,后續(xù)會繼續(xù)補充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市搓侄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌四啰,老刑警劉巖歇攻,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亲桥,居然都是意外死亡洛心,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門题篷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來词身,“玉大人,你說我怎么就攤上這事番枚》ㄑ希” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵葫笼,是天一觀的道長深啤。 經(jīng)常有香客問我,道長路星,這世上最難降的妖魔是什么溯街? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮洋丐,結(jié)果婚禮上呈昔,老公的妹妹穿的比我還像新娘。我一直安慰自己友绝,他們只是感情好堤尾,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著九榔,像睡著了一般哀峻。 火紅的嫁衣襯著肌膚如雪涡相。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天剩蟀,我揣著相機與錄音催蝗,去河邊找鬼。 笑死育特,一個胖子當(dāng)著我的面吹牛丙号,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缰冤,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼犬缨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棉浸?” 一聲冷哼從身側(cè)響起怀薛,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迷郑,沒想到半個月后枝恋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡嗡害,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年焚碌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霸妹。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡十电,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叹螟,到底是詐尸還是另有隱情鹃骂,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布首妖,位于F島的核電站偎漫,受9級特大地震影響爷恳,放射性物質(zhì)發(fā)生泄漏有缆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一温亲、第九天 我趴在偏房一處隱蔽的房頂上張望棚壁。 院中可真熱鬧,春花似錦栈虚、人聲如沸袖外。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曼验。三九已至泌射,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鬓照,已是汗流浹背熔酷。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留豺裆,地道東北人拒秘。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像臭猜,于是被迫代替她去往敵國和親躺酒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355