diff --git a/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
index fb1893dcb1f..96a44ba313f 100644
--- a/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
+++ b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html
@@ -3,9 +3,9 @@
#drawer
class="sidenav"
fixedInViewport="true"
- [attr.role]="(isHandset$ | async) ? 'dialog' : 'navigation'"
- [mode]="(isHandset$ | async) ? 'over' : 'side'"
- [opened]="!(isHandset$ | async)">
+ [attr.role]="isHandset ? 'dialog' : 'navigation'"
+ [mode]="isHandset ? 'over' : 'side'"
+ [opened]="!isHandset">
Menu
Link 1
@@ -20,7 +20,7 @@
aria-label="Toggle sidenav"
mat-icon-button
(click)="drawer.toggle()"
- *ngIf="isHandset$ | async">
+ *ngIf="isHandset">
menu
<%= project %>
diff --git a/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
index 6921eceb6b0..d724892f0b2 100644
--- a/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
+++ b/src/lib/schematics/nav/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts
@@ -1,7 +1,7 @@
-import { Component<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
+import { Component, OnDestroy<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%><% if(changeDetection !== 'Default') { %>, ChangeDetectionStrategy<% }%> } from '@angular/core';
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
-import { Observable } from 'rxjs';
-import { map } from 'rxjs/operators';
+import { Subject } from 'rxjs';
+import { takeUntil } from 'rxjs/operators';
@Component({
selector: '<%= selector %>',<% if(inlineTemplate) { %>
@@ -16,13 +16,25 @@ import { map } from 'rxjs/operators';
encapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } if (changeDetection !== 'Default') { %>,
changeDetection: ChangeDetectionStrategy.<%= changeDetection %><% } %>
})
-export class <%= classify(name) %>Component {
+export class <%= classify(name) %>Component implements OnDestroy {
- isHandset$: Observable = this.breakpointObserver.observe(Breakpoints.Handset)
- .pipe(
- map(result => result.matches)
- );
+ isHandset: boolean;
- constructor(private breakpointObserver: BreakpointObserver) {}
+ /** Emits when the component is destroyed. */
+ private readonly _destroyed = new Subject();
+
+ constructor(breakpointObserver: BreakpointObserver) {
+ breakpointObserver.observe(Breakpoints.Handset)
+ .pipe(
+ takeUntil(this._destroyed)
+ ).subscribe(result => {
+ this.isHandset = result.matches;
+ });
+ }
+
+ ngOnDestroy() {
+ this._destroyed.next();
+ this._destroyed.complete();
+ }
}