angular - 如何使用 selectionmodel 实现对所有树项的选择?
问题描述
我有一棵树,里面有一系列物品。我像这样组织了选项列表更改活动。
checklistSelection = new SelectionModel<TodoItemFlatNode>(true);
this.checklistSelection.changed.subscribe(data => {
this.selectedEmit.emit(this.checklistSelection.selected.map(s => s.item));
});
以前,用户只能通过单击来选择树元素。一切都很好。我现在添加了一个“全选”按钮。
public SelectAllNode(): void {
this.checklistSelection.clear();
if (this.isCheckedAllNode) {
for (let dataNode of this.treeControl.dataNodes) {
this.checklistSelection.select(dataNode);
}
} else {
for (let dataNode of this.treeControl.dataNodes) {
this.checklistSelection.deselect(dataNode);
}
}
}
我的树中有 3000 多个项目。当用户单击此按钮时,会发生 3000 个事件 - 非常不切实际。请告诉我如何最好地组织所有元素的选择?例如,取消订阅一个事件,最后再订阅一次?
解决方案
当我这样做时,问题似乎消失了:
public SelectAllNode(): void {
this.checklistSelection.clear();
if (this.isCheckedAllNode) {
this.checklistSelection.select(...this.treeControl.dataNodes);
} else {
this.checklistSelection.deselect(...this.treeControl.dataNodes);
}
}
但我不知道这有多好。
推荐阅读
- azure - ST_DISTANCE 返回什么单位?
- python - 是否可以在 Python 中动态地为内置的 Python 对象添加属性?
- c - 如何将 4 个无符号字符数组元素合并为一个十六进制值?
- jenkins - 如何获取 Jenkins 中所有宏的列表?
- python - 绘制具有重叠轮廓的每个 df 列的直方图
- azure - Azure AD B2C - 使用电子邮件或手机注册/登录
- node.js - 我应该如何在 NodeJS 中存储文件
- python - 为什么我在运行代码时可以看到 pip list sklearn 但在 Jupyter 中看不到?
- dialogflow-es - 如何格式化 DialogFlow 中 Facebook Messenger 响应的 @sys.date 和 @sys.time?
- java - 在 VS Code 中调试已编译的 Java .class 文件