#angular #typescript #tree #selectall
#angular #typescript #дерево #selectall
Вопрос:
У меня есть дерево с выбором элементов. Я организовал событие изменения списка выбора следующим образом.
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 событий — очень непрактично. Подскажите, пожалуйста, как лучше организовать выделение всех элементов? Например, отписаться от события, а в конце подписаться на него снова?
Ответ №1:
Кажется, проблема исчезла, когда я это сделал:
public SelectAllNode(): void {
this.checklistSelection.clear();
if (this.isCheckedAllNode) {
this.checklistSelection.select(...this.treeControl.dataNodes);
} else {
this.checklistSelection.deselect(...this.treeControl.dataNodes);
}
}
Но я не знаю, насколько это хорошо.