开发场景:angular7
html代码
<p-tree selectionMode="checkbox" [value]="Source" [(selection)]="SelectedSource" emptyMessage="没有数据"></p-tree>
ts代码
SelectedSource: TreeNode[]=[]; //选中数据
Source: TreeNode[];//初始数据
SelectAuthor:any[];
ngOnInit() {
this.initSelectedDB(this.Source,this.SelectedSource,y.AuthorId);
}
initSelectedDB(DB: TreeNode[], SelectedDB: TreeNode[], Id: number) {
if (DB) {
DB.forEach(element => {
if (element.data['Id'] == Id) {
element.data['IsSelect'] = true;
SelectedDB.push(element);
}else {
if (element.children) {
this.initSelectedDB(element.children, SelectedDB, Id);
}
}
});
let count:number=DB.length;
let selectedCount:number= DB.filter(x=>{
return x.data['IsSelect']==true;
}).length;
if(count>0 && selectedCount>0 && count == selectedCount)
{
this.initParentSelected(DB[0],SelectedDB);
}
if(count>0 && selectedCount>0 && count > selectedCount)
{
this.initpartialSelected(DB[0]);
}
if(count>0 && selectedCount == 0)
{
this.initpartialSelected1(DB);
}
}
}
initpartialSelected1(DB:TreeNode[])
{
if (DB){
let count:number=DB.length;
let selectedCount:number= DB.filter(x=>{
return x.partialSelected == true;
}).length;
if(count>0 && selectedCount>0)
{
this.initpartialSelected(DB[0]);
}
}
}
initpartialSelected(DB: TreeNode) {
if (DB && DB.parent) {
DB.parent.partialSelected = true;
DB.parent.data['IsSelect'] = false;
}
}
initParentSelected(DB: TreeNode, SelectedDB: TreeNode[]) {
if (DB && DB.parent) {
DB.parent.partialSelected = false;
DB.parent.data['IsSelect'] = true;
SelectedDB.push(DB.parent);
}
}
效果如下
这是树结构
这是第一次选中,保存数据之后,第二次初始化的选中情况
核心代码就是以上部门,省略掉了对Tree的初始化。如果有什么不当之处,请各位大神及时纠正(QQ:544462804)