Skip to content

Commit f0dc895

Browse files
crisbetowagnermaciel
authored andcommitted
fix(material/expansion): not clearing custom query list (#21222)
`MatAccordion` has a custom `QueryList` for keeping track of its own headers which we weren't destroying. These changes add a call to destroy it since it has the potential of leaking memory. (cherry picked from commit 2076686)
1 parent c4f1128 commit f0dc895

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/material/expansion/accordion.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@
66
* found in the LICENSE file at https://angular.io/license
77
*/
88

9-
import {Directive, Input, ContentChildren, QueryList, AfterContentInit} from '@angular/core';
9+
import {
10+
Directive,
11+
Input,
12+
ContentChildren,
13+
QueryList,
14+
AfterContentInit,
15+
OnDestroy,
16+
} from '@angular/core';
1017
import {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';
1118
import {CdkAccordion} from '@angular/cdk/accordion';
1219
import {FocusKeyManager} from '@angular/cdk/a11y';
@@ -37,7 +44,8 @@ import {MatExpansionPanelHeader} from './expansion-panel-header';
3744
'[class.mat-accordion-multi]': 'this.multi',
3845
}
3946
})
40-
export class MatAccordion extends CdkAccordion implements MatAccordionBase, AfterContentInit {
47+
export class MatAccordion extends CdkAccordion implements MatAccordionBase,
48+
AfterContentInit, OnDestroy {
4149
private _keyManager: FocusKeyManager<MatExpansionPanelHeader>;
4250

4351
/** Headers belonging to this accordion. */
@@ -86,5 +94,10 @@ export class MatAccordion extends CdkAccordion implements MatAccordionBase, Afte
8694
this._keyManager.updateActiveItem(header);
8795
}
8896

97+
ngOnDestroy() {
98+
super.ngOnDestroy();
99+
this._ownHeaders.destroy();
100+
}
101+
89102
static ngAcceptInputType_hideToggle: BooleanInput;
90103
}

tools/public_api_guard/material/expansion.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export declare const MAT_ACCORDION: InjectionToken<MatAccordionBase>;
44

55
export declare const MAT_EXPANSION_PANEL_DEFAULT_OPTIONS: InjectionToken<MatExpansionPanelDefaultOptions>;
66

7-
export declare class MatAccordion extends CdkAccordion implements MatAccordionBase, AfterContentInit {
7+
export declare class MatAccordion extends CdkAccordion implements MatAccordionBase, AfterContentInit, OnDestroy {
88
_headers: QueryList<MatExpansionPanelHeader>;
99
displayMode: MatAccordionDisplayMode;
1010
get hideToggle(): boolean;
@@ -13,6 +13,7 @@ export declare class MatAccordion extends CdkAccordion implements MatAccordionBa
1313
_handleHeaderFocus(header: MatExpansionPanelHeader): void;
1414
_handleHeaderKeydown(event: KeyboardEvent): void;
1515
ngAfterContentInit(): void;
16+
ngOnDestroy(): void;
1617
static ngAcceptInputType_hideToggle: BooleanInput;
1718
static ɵdir: i0.ɵɵDirectiveDefWithMeta<MatAccordion, "mat-accordion", ["matAccordion"], { "multi": "multi"; "hideToggle": "hideToggle"; "displayMode": "displayMode"; "togglePosition": "togglePosition"; }, {}, ["_headers"]>;
1819
static ɵfac: i0.ɵɵFactoryDef<MatAccordion, never>;

0 commit comments

Comments
 (0)