Skip to content

Commit be2df73

Browse files
committed
(fix): make sure no leaking subscription
make sure subscription on fromEvent observable is unsubscribed when the component is destroyed
1 parent 8ed0129 commit be2df73

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

src/lib/sidenav/drawer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
206206
);
207207
}
208208

209+
/** Emits when the component is destroyed. */
210+
private readonly _destroyed = new Subject<void>();
211+
209212
/** Event emitted when the drawer's position changes. */
210213
// tslint:disable-next-line:no-output-on-prefix
211214
@Output('positionChanged') onPositionChanged: EventEmitter<void> = new EventEmitter<void>();
@@ -249,7 +252,8 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
249252
*/
250253
this._ngZone.runOutsideAngular(() => {
251254
fromEvent<KeyboardEvent>(this._elementRef.nativeElement, 'keydown').pipe(
252-
filter(event => event.keyCode === ESCAPE && !this.disableClose)
255+
filter(event => event.keyCode === ESCAPE && !this.disableClose),
256+
takeUntil(this._destroyed)
253257
).subscribe(event => this._ngZone.run(() => {
254258
this.close();
255259
event.stopPropagation();
@@ -314,6 +318,7 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
314318
if (this._focusTrap) {
315319
this._focusTrap.destroy();
316320
}
321+
this._destroyed.next();
317322
}
318323

319324
/**

0 commit comments

Comments
 (0)