2 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
這個(gè)問題剛遇到過。
官方?jīng)]有提供任何對(duì)expand定制化的api和屬性,要么所有行都能擴(kuò)展,并且擴(kuò)展列的圖標(biāo)、文字都不能自定義,要么就沒有擴(kuò)展。
翻了源碼,發(fā)現(xiàn)是寫死的,完全無后門可走。。。提了issue,官方回復(fù)“Sorry, we have no plan to support this.”。。。只能自己想辦法hack了。
他擴(kuò)展列的事件是綁在".el-table__expand-icon"這個(gè)div上的,思路倒是簡(jiǎn)單,就是想辦法把對(duì)應(yīng)行的這個(gè)div的display設(shè)成none。關(guān)鍵是怎么找到要隱藏的這些div。
tableData數(shù)組的順序和表格最終渲染出來的行順序是完全一致的,并且關(guān)鍵一點(diǎn),與table中的".el-table__expand-icon"元素的順序也完全一致。所以,只要等table渲染完成以后,在nextTick里查出所有滿足條件的".el-table__expand-icon"元素隱藏掉就完事兒了。
比如一條數(shù)據(jù)的狀態(tài)是1就擴(kuò)展,否則就不允許擴(kuò)展。在給tableData賦值以后,執(zhí)行:
this.$nextTick(function(){
let expandIcon = this.$refs.table.$el.querySelectorAll(".el-table__expand-icon");
this.tableData.forEach((rowData, index) => {
if (rowData.state !== "1") {
expandIcon[index].setAttribute("style", "display:none");
} else {
expandIcon[index].setAttribute("style", "display:block");
}
});
})
另外,如果不想用官方的展開列的那個(gè)箭頭表示展開收起,替換成其他icon或者文字,也需要hack。直接從css入手就行:
屏蔽掉.el-table__expand-icon--expanded的rotate;替換掉.el-table__expand-icon>.el-icon的position,修改.el-icon-arrow-right:before的content
添加回答
舉報(bào)