diff --git a/src/material/sidenav/drawer.spec.ts b/src/material/sidenav/drawer.spec.ts index 019e9ddae15d..d65226cf1194 100644 --- a/src/material/sidenav/drawer.spec.ts +++ b/src/material/sidenav/drawer.spec.ts @@ -848,7 +848,20 @@ describe('MatDrawerContainer', () => { .toBe(true); })); + it('should clean up the drawers stream on destroy', fakeAsync(() => { + const fixture = TestBed.createComponent(DrawerContainerTwoDrawerTestApp); + fixture.detectChanges(); + + const spy = jasmine.createSpy('complete spy'); + const subscription = fixture.componentInstance.drawerContainer._drawers.changes.subscribe({ + complete: spy + }); + fixture.destroy(); + + expect(spy).toHaveBeenCalled(); + subscription.unsubscribe(); + })); }); diff --git a/src/material/sidenav/drawer.ts b/src/material/sidenav/drawer.ts index b68758d0ee6e..2d1356b32e58 100644 --- a/src/material/sidenav/drawer.ts +++ b/src/material/sidenav/drawer.ts @@ -633,6 +633,7 @@ export class MatDrawerContainer implements AfterContentInit, DoCheck, OnDestroy ngOnDestroy() { this._contentMarginChanges.complete(); this._doCheckSubject.complete(); + this._drawers.destroy(); this._destroyed.next(); this._destroyed.complete(); }