1.先把要選中的節(jié)點(diǎn)id取出來(lái)放數(shù)組里面
<template>
<div>
<el-tree
:props="defaultProps"
:data="menuData"
show-checkbox
node-key="id"
accordion
@check="handleCheckChange"
ref="tree"
:default-checked-keys='resourceCheckedKey'
>
</el-tree>
</div>
</template>
3.在data里面設(shè)置一個(gè)resourceCheckedKey:[]
data(){
return{
menuData:[],
resourceCheckedKey: [],
defaultProps:{
label: 'name',
children: 'children'
}
}
},
4.that.$refs.tree.setChecked(value,true,false)---(子節(jié)點(diǎn)只選中一個(gè)也可以)必須放到setTimeout里面
//this.resourceCheckedKey要設(shè)置一個(gè)setTimeout里面茂附,因?yàn)樯厦?then是異步的,所以數(shù)沒(méi)有加載出來(lái)督弓,就加載了this.resourceCheckedKey营曼,所以要用setTimeout設(shè)置一下
setTimeout(function () {
that.resourceCheckedKey.forEach((value)=>{
//setChecked 子節(jié)點(diǎn)只選中一個(gè)需要用setChecked,((key/data, checked, deep) 接收三個(gè)參數(shù)愚隧,
1. 勾選節(jié)點(diǎn)的 key 或者 data 2. boolean 類(lèi)型蒂阱,節(jié)點(diǎn)是否選中 3. boolean 類(lèi)型,是否設(shè)置子節(jié)點(diǎn) 狂塘,默認(rèn)為 false)如果全部選中setCheckedKeys
that.$refs.tree.setChecked(value,true,false)
});
},500);
return this.menuData
})
},
loadNode(roleId) {
var that = this;
api.getRoleMenuJson(roleId).then(res=>{
res.data.forEach((value)=>{
if(!value.pId){
if(value.checked && this.resourceCheckedKey.indexOf(value.id)==-1){
this.resourceCheckedKey.push(value.id);
}
this.menuData.push(value)
this.groupMenu(value,res.data);
}
});
groupMenu(value,data){
value.children=[];
data.forEach((item)=>{
if(item.checked && this.resourceCheckedKey.indexOf(item.id)==-1){
this.resourceCheckedKey.push(item.id);
}
if(value.id==item.pId){
value.children.push(item);
this.groupMenu(item,data)
}
});
}
子組件選中的id
handleCheckChange(data,checked) {
//checked.checkedKeys 選中的節(jié)點(diǎn)id數(shù)組
//checked.halfCheckedKeys 半選中節(jié)點(diǎn)id數(shù)組
let ids=[];
ids=checked.halfCheckedKeys.concat(checked.checkedKeys);//選中節(jié)點(diǎn)和半選中節(jié)點(diǎn)所有的id
this.$emit('menu-select',ids)
},
2.父組件接受
getMenuTree(ids){
console.log(ids);
//根據(jù)后臺(tái)的接口形式保存
//ids 選中和半選中ids
this.editForm.ckStatus='';
this.editForm.ckIds=ids.join(',');
ids.forEach(value=>{
this.editForm.ckStatus+="1,"
});
this.editForm.ckStatus.slice(0,this.editForm.ckStatus.length-1)
},
終中結(jié)果.png