PrimeNg 组织结构图以编程方式刷新
PrimeNg Organization Chart refresh programmatically
我正在使用 p-organizationChart 来显示层次结构。我正在动态添加 child。添加child后,它不显示展开箭头,但是当我select任何节点时,它会反映出来。
所以,我想以编程方式刷新此 org-chart。
有什么建议吗?
<p-organizationChart [value]="programStructure" styleClass="company" selectionMode="single" [(selection)]="selectedParentProgram" #chart [preserveSpace]="false">
</p-organizationChart>
添加Child:
addChildNode() {
this.selectedParentProgram.children.push({
label: this.selectedChildProgram.name,
type: 'node',
expanded: true,
data: {
'programId': this.selectedChildProgram.id,
'versionId': this.selectedProgramVersion.id
},
children: []
});
this.isAddProgramDialogShown = false;
this.clear();
}
此代码按预期完美运行。但是,除非我 select/unselect 任何节点,否则图表不会更新。
解决方案对我有用
this.cd.detectChanges();
Angular 更改检测通常在对对象的引用发生更改时触发。使用它的 push
方法向数组添加元素不会更改数组的引用。相反,您可以尝试使用扩展语法重新分配变量。
尝试以下方法
addChildNode() {
const child = {
label: this.selectedChildProgram.name,
type: 'node',
expanded: true,
data: {
'programId': this.selectedChildProgram.id,
'versionId': this.selectedProgramVersion.id
},
children: []
};
this.selectedParentProgram = {
...this.selectedChildProgram,
children: [
...this.selectedChildProgram.children,
child
]
};
this.isAddProgramDialogShown = false;
this.clear();
}
我正在使用 p-organizationChart 来显示层次结构。我正在动态添加 child。添加child后,它不显示展开箭头,但是当我select任何节点时,它会反映出来。
所以,我想以编程方式刷新此 org-chart。
有什么建议吗?
<p-organizationChart [value]="programStructure" styleClass="company" selectionMode="single" [(selection)]="selectedParentProgram" #chart [preserveSpace]="false">
</p-organizationChart>
添加Child:
addChildNode() {
this.selectedParentProgram.children.push({
label: this.selectedChildProgram.name,
type: 'node',
expanded: true,
data: {
'programId': this.selectedChildProgram.id,
'versionId': this.selectedProgramVersion.id
},
children: []
});
this.isAddProgramDialogShown = false;
this.clear();
}
此代码按预期完美运行。但是,除非我 select/unselect 任何节点,否则图表不会更新。
解决方案对我有用
this.cd.detectChanges();
Angular 更改检测通常在对对象的引用发生更改时触发。使用它的 push
方法向数组添加元素不会更改数组的引用。相反,您可以尝试使用扩展语法重新分配变量。
尝试以下方法
addChildNode() {
const child = {
label: this.selectedChildProgram.name,
type: 'node',
expanded: true,
data: {
'programId': this.selectedChildProgram.id,
'versionId': this.selectedProgramVersion.id
},
children: []
};
this.selectedParentProgram = {
...this.selectedChildProgram,
children: [
...this.selectedChildProgram.children,
child
]
};
this.isAddProgramDialogShown = false;
this.clear();
}