鍍金池/ 問答/HTML5  HTML/ element ui 的talbe中屬性type=“extpand”的動態(tài)控制

element ui 的talbe中屬性type=“extpand”的動態(tài)控制

element ui 的talbe中有一個type=“extpand”,我想控制它,讓某些行不用展開。

回答
編輯回答
檸檬藍

可以試試 toggleRowExpansion這個方法element-ui table

2018年3月5日 07:10
編輯回答
別硬撐

這個問題剛遇到過。
官方?jīng)]有提供任何對expand定制化的api和屬性,要么所有行都能擴展,并且擴展列的圖標、文字都不能自定義,要么就沒有擴展。
翻了源碼,發(fā)現(xiàn)是寫死的,完全無后門可走。。。提了issue,官方回復“Sorry, we have no plan to support this.”。。。只能自己想辦法hack了。

他擴展列的事件是綁在".el-table__expand-icon"這個div上的,思路倒是簡單,就是想辦法把對應行的這個div的display設成none。關鍵是怎么找到要隱藏的這些div。

tableData數(shù)組的順序和表格最終渲染出來的行順序是完全一致的,并且關鍵一點,與table中的".el-table__expand-icon"元素的順序也完全一致。所以,只要等table渲染完成以后,在nextTick里查出所有滿足條件的".el-table__expand-icon"元素隱藏掉就完事兒了。

比如一條數(shù)據(jù)的狀態(tài)是1就擴展,否則就不允許擴展。在給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");
                }
            });
})

另外,如果不想用官方的展開列的那個箭頭表示展開收起,替換成其他icon或者文字,也需要hack。直接從css入手就行:
屏蔽掉.el-table__expand-icon--expanded的rotate;替換掉.el-table__expand-icon>.el-icon的position,修改.el-icon-arrow-right:before的content

2017年8月19日 17:46