Skip to content

bug(mat-tree): How to maintain tree expansion state if TreeControl is deprecated? #30258

Open
@danielsharvey

Description

@danielsharvey

Is this a regression?

  • Yes, this behavior used to work in the previous version

The previous version in which this bug was not present was

pre v18.2.0

Description

Previously, it was possible to maintain the expansion state independent of the MatTree (rendered) component by using a TreeControl.

With TreeControl deprecated, this does not appear possible any longer.

I rely on this feature so would appreciate consideration of a path forward.

Of note, the selection model is maintained privately in MatTree:

_getExpansionModel() {
if (!this.treeControl) {
this._expansionModel ??= new SelectionModel<K>(true);
return this._expansionModel;
}
return this.treeControl.expansionModel;
}

Note that this is not a duplicate of #29856, which looks to relate to accessing some of the methods of TreeControl, which have been made available on MatTree itself.

Reproduction

I can produce a reproduction but I believe the regression has been clearly explained above and a reproduction does not add value.

Expected Behavior

There is a mechanism for maintaining expansion state independent of the rendered component.

Actual Behavior

Expansion state is lost when the component is destroyed.

Environment

Angular CLI: 18.0.3
Node: 18.20.5
Package Manager: npm 10.8.2
OS: darwin arm64

Angular: 18.0.2
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.1800.3
@angular-devkit/build-angular     18.0.3
@angular-devkit/core              18.0.3
@angular-devkit/schematics        18.0.3
@angular/cdk                      18.2.14
@angular/cli                      18.0.3
@angular/flex-layout              14.0.0-beta.41
@angular/material                 18.2.14
@angular/material-luxon-adapter   18.2.14
@schematics/angular               18.0.3
ng-packagr                        18.0.0
rxjs                              7.8.1
typescript                        5.4.5
zone.js                           0.14.4

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3An issue that is relevant to core functions, but does not impede progress. Important, but not urgentarea: cdk/tree

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions