当使用鼠标单击在基于复选框的树选择中选择节点时,默认行为是将选择传播到树上,以便根据需要选择或部分选择祖先。
以编程方式设置树的选择时,预期的行为是这种传播也会发生,但目前还没有。
解决这个错误非常繁重。手动正确地传播此状态需要大量代码,特别是如果您想要处理所有可能的情况,例如选择非叶节点、向上和向下传播以及区分部分选择和完全选择(因为一个是由一个是修改节点树本身的内容,另一个是通过操作实际选择值来管理)。现有的传播实现似乎没有以允许库的用户轻松直接触发现有逻辑的方式打包,因此手动解决方法会产生大量的代码重复。
有人知道如何解决这个问题吗?
预期行为
当树、树选择或其他相关组件的选择被修改时,即使是以编程方式修改,也应该允许发生配置的传播行为。
我昨天也遇到了同样的问题。以编程方式分配给 p 树的 [(selection)] 字段不会传播到选择。似乎与 primeng 中未解决的错误有关:https://github.com/primefaces/primeng/issues/12714
这是我的p树概念,它是单选模式(不是复选框等):
<p-tree [value]="treeData" selectionMode="single" [(selection)]="selectedNode" (onNodeSelect)="selectNode($event)">
我编写了一个以编程方式选择的解决方法,该方法手动将树扩展到特定节点:
private selectAndExpandParent(selectedNode: TreeNode) {
selectedNode.expanded = true;
selectedNode.partialSelected = true; //this is necessary(for primeng) for programmatically selection.
if (selectedNode.parent) {
this.selectAndExpandParent(selectedNode.parent);
}
}
我不知道 primeng 的内部实现,但仅分配 Expanded = true 不足以进行传播,在选定节点的树路径中部分选择也应该为 true。