el-tree自定義權限勾選

需求

記錄下最近項目遇到的奇怪需求:使用el-tree實現(xiàn)樹狀圖的正向級聯(lián)和反向不級聯(lián)正卧,簡單說就是父級被選中子集節(jié)點也被選中蠢熄,子集節(jié)點被選中所有父級節(jié)點也要被選中,而子集節(jié)點取消選中父級節(jié)點依然是選中狀態(tài)......上圖:

大致就是這么個意思炉旷,歷經(jīng)坎坷終于搞出來了G┛住!窘行!

思路

將el-tree的默認勾選機制取消饥追,將處理過的數(shù)據(jù)手動渲染;

1罐盔、check-strictly:true; // 在顯示復選框的情況下但绕,是否嚴格的遵循父子不互相關聯(lián)的做法,默認為 false惶看,設置為true則每一級勾選都相互獨立

2捏顺、統(tǒng)一處理數(shù)據(jù):勾選節(jié)點時反向遞歸出所有父級節(jié)點,再遞歸出所有子集節(jié)點碳竟,存儲

3草丧、統(tǒng)一渲染存儲的數(shù)據(jù)

具體實現(xiàn)

html:

v-loading="treeLoading"

:check-strictly="checkAbiut"

:ref="'tree' + index"

default-expand-all

show-checkbox

class="tree-line underTabsTree"

:data="treeData"

:props="defaultProps"

node-key="id"

:indent="0"

:default-checked-keys="defaultChecked"

@check-change="(data, checked, indeterminate) => handleNodeClick(data, checked, indeterminate, index)">

data:

treeLoading: false,

checkAbiut: true,

treeData: [],

defaultProps: {

children: "children",

label: "label"

},

defaultChecked: []

methods:

flatArry(list, flatList) { // 將樹的數(shù)據(jù)扁平化處理

for (let i = 0; i < list.length; i++) {

flatList.push(list[i]);

if (list[i].children.length > 0) {

this.flatArry(list[i].children, flatList);

}

}

},

getParent(list, data) { // 獲取勾選節(jié)點的所有父級節(jié)點(反向遞歸),push到數(shù)組

if (data.pid != null) {

let flatList = [];

let faData = [];

this.flatArry(this.treeData, flatList);

faData = flatList.filter(item => {

return item.id == data.pid;

});

if (list.indexOf(faData[0].id) == -1) {

list.push(faData[0].id);

}

this.getParent(list, faData[0]); // 選中

}

},

getSon(list, data) { // 獲取勾選節(jié)點的所有子節(jié)點莹桅,push到數(shù)組

for (let x = 0; x < data.children.length; x++) {

if (list.indexOf(data.children[x].id) == -1) {

list.push(data.children[x].id);

}

this.getSon(list, data.children[x]);

}

},

conseSon(list, data) { // 取消勾選時將所有子節(jié)點設為‘’

for (let x = 0; x < data.children.length; x++) {

if (list.indexOf(data.children[x].id) != -1) {// 數(shù)組里有

list[list.indexOf(data.children[x].id)] = "";

this.conseSon(list, data.children[x]);

}

}

},

editPermission(list, data, slected) { // 勾選對數(shù)據(jù)進行處理

if (slected) { // 選中

if (list.indexOf(data.id) == -1) { // 數(shù)組里沒有

list.push(data.id);

this.getSon(list, data);

if (data.id != '0' && data.id != '' && data.id != null) {

this.getParent(list, data);

}

}

} else { // 取消選中

if (list.indexOf(data.id) != -1) { // 數(shù)組里有

list[list.indexOf(data.id)] = "";

this.conseSon(list, data);

}

}

},

handleNodeClick(data, checked, indeterminate, index) { // 勾選觸發(fā)的函數(shù)昌执,choosedList為存儲最終數(shù)據(jù)的數(shù)組

this.editPermission(this.choosedList, data, checked);

this.$nextTick(() => { // 一定要放在nextTick否則可能渲染不出來

let choosedList = this.choosedList.filter((item) => {? return item != ''})
this.$refs[`tree${index}`][0].setCheckedKeys(choosedList); // this.$refs[`tree${index}`][0]寫法時因為tree在v-for模塊里的,若是只有一個單獨的tree則[0]不需要復制代碼

});

},

總結

這個需求改了很多版诈泼,導致最后這一版有一種無從下手的感覺懂拾,后來靜下心來捋一捋,思路清晰了寫的也很快铐达,希望對你有點幫助岖赋。PS:本人能力有限,僅供參考瓮孙,歡迎交流唐断,勿噴謝謝选脊。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市脸甘,隨后出現(xiàn)的幾起案子恳啥,更是在濱河造成了極大的恐慌,老刑警劉巖丹诀,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钝的,死亡現(xiàn)場離奇詭異,居然都是意外死亡铆遭,警方通過查閱死者的電腦和手機硝桩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枚荣,“玉大人碗脊,你說我怎么就攤上這事¢献保” “怎么了望薄?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呼畸。 經(jīng)常有香客問我,道長颁虐,這世上最難降的妖魔是什么蛮原? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮另绩,結果婚禮上儒陨,老公的妹妹穿的比我還像新娘。我一直安慰自己笋籽,他們只是感情好蹦漠,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著车海,像睡著了一般笛园。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侍芝,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天研铆,我揣著相機與錄音,去河邊找鬼州叠。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缕坎。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼虱肄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了交煞?” 一聲冷哼從身側(cè)響起咏窿,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎错敢,沒想到半個月后翰灾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡稚茅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年纸淮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亚享。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡咽块,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出欺税,到底是詐尸還是另有隱情侈沪,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布晚凿,位于F島的核電站亭罪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歼秽。R本人自食惡果不足惜应役,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燥筷。 院中可真熱鬧箩祥,春花似錦、人聲如沸肆氓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谢揪。三九已至蕉陋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間键耕,已是汗流浹背寺滚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屈雄,地道東北人村视。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像酒奶,于是被迫代替她去往敵國和親蚁孔。 傳聞我的和親對象是個殘疾皇子奶赔,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容