创建一个sidenav组件
sidenav.component.html:
<md-sidenav-container>
<md-sidenav #sidenav mode="side">
Sidenav content
</md-sidenav>
<ng-content></ng-content>
</md-sidenav-container>
sidenav.component.ts:
@Component({
selector: 'app-sidenav',
templateUrl: './sidenav.component.html',
styleUrls: ['./sidenav.component.scss']
})
export class SidenavComponent implements OnInit {
@ViewChild('sidenav') public sidenav: MdSidenav;
constructor(private sidenavService: SidenavService) { }
ngOnInit() {
this.sidenavService.setSidenav(this.sidenav);
}
}
sidenav.service.ts:
@Injectable()
export class SidenavService {
private sidenav: MdSidenav;
public setSidenav(sidenav: MdSidenav) {
this.sidenav = sidenav;
}
public open(): Promise<MdDrawerToggleResult> {
return this.sidenav.open();
}
public close(): Promise<MdDrawerToggleResult> {
return this.sidenav.close();
}
public toggle(isOpen?: boolean): Promise<MdDrawerToggleResult> {
return this.sidenav.toggle(isOpen);
}
}
(不要忘记将组件和服务添加到模块中!)
在 AppComponent 中你可以像这样使用 sidenav 组件:
<app-sidenav>
<router-outlet></router-outlet>
</app-sidenav>
路由器将组件加载到router-outlet。 router-outlet 元素将放置在 <ng-content></ng-content> 内(参见 sidenav.component.html)。
sidenav 服务使您能够从应用程序的每个组件中控制 sidenav 组件。
header组件中sidenav服务的使用
在头部组件中注入服务:
constructor(private sidenavService: SidenavService) { }
创建切换sidenav的方法:
toggleSidenav() {
this.sidenavService.toggle();
}
在标记中你可以使用这样的按钮:
<button (click)="toggleSidenav()">Toggle sidenav</button>
在此处查看小演示:
https://stackblitz.com/edit/angular-material-kcszgq