Skip to content

Commit f7dcc27

Browse files
erhisemmalerba
authored andcommitted
fix(drawer): ensure all observables are unsubscribed (#13378)
make sure subscription on fromEvent observable is unsubscribed when the component is destroyed
1 parent a72d05f commit f7dcc27

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/lib/sidenav/drawer.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
217217
);
218218
}
219219

220+
/** Emits when the component is destroyed. */
221+
private readonly _destroyed = new Subject<void>();
222+
220223
/** Event emitted when the drawer's position changes. */
221224
// tslint:disable-next-line:no-output-on-prefix
222225
@Output('positionChanged') onPositionChanged: EventEmitter<void> = new EventEmitter<void>();
@@ -260,7 +263,8 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
260263
*/
261264
this._ngZone.runOutsideAngular(() => {
262265
fromEvent<KeyboardEvent>(this._elementRef.nativeElement, 'keydown').pipe(
263-
filter(event => event.keyCode === ESCAPE && !this.disableClose)
266+
filter(event => event.keyCode === ESCAPE && !this.disableClose),
267+
takeUntil(this._destroyed)
264268
).subscribe(event => this._ngZone.run(() => {
265269
this.close();
266270
event.stopPropagation();
@@ -341,6 +345,8 @@ export class MatDrawer implements AfterContentInit, AfterContentChecked, OnDestr
341345

342346
this._animationStarted.complete();
343347
this._animationEnd.complete();
348+
this._destroyed.next();
349+
this._destroyed.complete();
344350
}
345351

346352
/**

0 commit comments

Comments
 (0)