From 35a5b47f7d7d559f6b2180b0f8a10283f08426f0 Mon Sep 17 00:00:00 2001 From: Erik Hidrup Date: Mon, 1 Oct 2018 17:40:20 +0200 Subject: [PATCH] fix(drawer): unsubscribe make sure subscription on fromEvent observable is unsubscribed when the component is destroyed --- src/lib/sidenav/drawer.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/sidenav/drawer.ts b/src/lib/sidenav/drawer.ts index 33744175f88d..7e36f977a3fe 100644 --- a/src/lib/sidenav/drawer.ts +++ b/src/lib/sidenav/drawer.ts @@ -217,6 +217,9 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr ); } + /** Emits when the component is destroyed. */ + private readonly _destroyed = new Subject(); + /** Event emitted when the drawer's position changes. */ // tslint:disable-next-line:no-output-on-prefix @Output('positionChanged') onPositionChanged: EventEmitter = new EventEmitter(); @@ -260,7 +263,8 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr */ this._ngZone.runOutsideAngular(() => { fromEvent(this._elementRef.nativeElement, 'keydown').pipe( - filter(event => event.keyCode === ESCAPE && !this.disableClose) + filter(event => event.keyCode === ESCAPE && !this.disableClose), + takeUntil(this._destroyed) ).subscribe(event => this._ngZone.run(() => { this.close(); event.stopPropagation(); @@ -341,6 +345,8 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr this._animationStarted.complete(); this._animationEnd.complete(); + this._destroyed.next(); + this._destroyed.complete(); } /**