如何在 angular 2 material 中隐藏侧边导航栏
How to hide side navigation bar in angular 2 material
我正在尝试使用 angular 2 material 创建响应式侧边导航栏。我的侧边导航正在工作。总是打开导航bar.How缩小屏幕尺寸时隐藏它吗
这是我的代码:
<md-sidenav-container style="width: 100%" onloadstart="false">
<div class="flex-container" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center center" fxLayoutAlign.xs="start">
<md-toolbar color="primary">
<md-icon>menu</md-icon>
<span>Profile</span>
<span class="example-fill-remaining-space"></span>
<span>
<button md-icon-button [mdMenuTriggerFor]="menu"><md-icon>more_vert</md-icon></button>
<md-menu #menu="mdMenu">
<button md-menu-item><md-icon>swap_horiz</md-icon><span>toggle</span></button>
<button md-menu-item disabled><md-icon>person</md-icon><span>profile</span></button>
<button md-menu-item><md-icon>exit_to_app</md-icon><span>log out</span></button>
</md-menu>
</span>
</md-toolbar>
<md-sidenav-layout class="demo-sidenav-layout">
<md-sidenav align="start" mode="side" opened>
<md-list>
<md-list-item>
<a routerLink="profile-home"><button md-button ><md-icon>home</md-icon> Home </button></a></md-list-item>
<md-list-item>
<a routerLink="profile-security"><button md-button ><md-icon>security</md-icon> Security </button></a></md-list-item>
<md-list-item>
<a routerLink="profile-settings"><button md-button ><md-icon>settings</md-icon>Settings </button></a></md-list-item>
</md-list>
</md-sidenav>
<router-outlet></router-outlet>
</md-sidenav-layout>
</div>
</md-sidenav-container>
只需将 class 添加到您的 md-sidenav,然后让 class 在屏幕足够小时隐藏它。
在您的模板中,将 class 添加到 md-sidenav
...
<md-sidenav align="start" mode="side" opened class="hide-on-small-screens">
<md-list>
<md-list-item>
...
在您的 css 中,实施您的 class
...
@media only screen and (max-width: 500px) {
.hide-on-small-screens {
display: none;
}
}
...
如果屏幕为 500 像素或更小,这将隐藏 sidenav。查找 媒体查询 以获取有关如何使用此方法的更多信息。
我知道样式应该与 CSS 保持一致,但我采用了不同的方法来解决这个问题。
我利用 Angular ViewChild 和 Hostlistener 模块以编程方式控制它。当 window 的大小发生变化时,它使您可以更好地控制要执行的操作。
在你的view/html中:
<md-sidenav #sidenav align="start" mode="side" opened>
...
</md-sidenav/>
在您的打字稿文件中:
import { ViewChild, HostListener } from '@angular/core';
import { MdSidenav } from '@angular/material';
export class ClassName implements AfterViewInit {
@ViewChild('sidenav') sidenav: MdSidenav;
constructor() {}
@HostListener('window:resize', [$event])
onResize(event): void {
if (this.sidenav !== undefined) {
if (event.target.innerWidth <= 500) { // This can be any value.
this.sidenav.close();
} else {
this.sidenav.open();
}
}
}
}
使用这种方法,每次执行 window 调整大小事件时,onResize 方法都会 运行。
您的查看文件:
您必须在组件 html 文件中添加 #sidenav 文档引用变量。
<mat-sidenav #sidenav>
...
</mat-sidenav>
您的 TS 文件:
您在 html 文件中声明的变量,您可以在 @viewchild 的帮助下访问组件 ts 文件中的该变量,请不要忘记将 sidenav 的类型定义为 MatSidenav。之后,您可以轻松访问 MatSidenav 上可用的所有方法,如关闭、打开、切换等。
import { Component, OnInit, ViewChild } from '@angular/core';
import { MatSidenav } from '@angular/material';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
@ViewChild('sidenav') sidenav: MatSidenav;
constructor(){
}
ngOnInit(){}
toggleSideNav(){
this.sidenav.toggle();
}
}
我正在尝试使用 angular 2 material 创建响应式侧边导航栏。我的侧边导航正在工作。总是打开导航bar.How缩小屏幕尺寸时隐藏它吗
这是我的代码:
<md-sidenav-container style="width: 100%" onloadstart="false">
<div class="flex-container" fxLayout="row" fxLayout.xs="column" fxLayoutAlign="center center" fxLayoutAlign.xs="start">
<md-toolbar color="primary">
<md-icon>menu</md-icon>
<span>Profile</span>
<span class="example-fill-remaining-space"></span>
<span>
<button md-icon-button [mdMenuTriggerFor]="menu"><md-icon>more_vert</md-icon></button>
<md-menu #menu="mdMenu">
<button md-menu-item><md-icon>swap_horiz</md-icon><span>toggle</span></button>
<button md-menu-item disabled><md-icon>person</md-icon><span>profile</span></button>
<button md-menu-item><md-icon>exit_to_app</md-icon><span>log out</span></button>
</md-menu>
</span>
</md-toolbar>
<md-sidenav-layout class="demo-sidenav-layout">
<md-sidenav align="start" mode="side" opened>
<md-list>
<md-list-item>
<a routerLink="profile-home"><button md-button ><md-icon>home</md-icon> Home </button></a></md-list-item>
<md-list-item>
<a routerLink="profile-security"><button md-button ><md-icon>security</md-icon> Security </button></a></md-list-item>
<md-list-item>
<a routerLink="profile-settings"><button md-button ><md-icon>settings</md-icon>Settings </button></a></md-list-item>
</md-list>
</md-sidenav>
<router-outlet></router-outlet>
</md-sidenav-layout>
</div>
</md-sidenav-container>
只需将 class 添加到您的 md-sidenav,然后让 class 在屏幕足够小时隐藏它。
在您的模板中,将 class 添加到 md-sidenav
...
<md-sidenav align="start" mode="side" opened class="hide-on-small-screens">
<md-list>
<md-list-item>
...
在您的 css 中,实施您的 class
...
@media only screen and (max-width: 500px) {
.hide-on-small-screens {
display: none;
}
}
...
如果屏幕为 500 像素或更小,这将隐藏 sidenav。查找 媒体查询 以获取有关如何使用此方法的更多信息。
我知道样式应该与 CSS 保持一致,但我采用了不同的方法来解决这个问题。
我利用 Angular ViewChild 和 Hostlistener 模块以编程方式控制它。当 window 的大小发生变化时,它使您可以更好地控制要执行的操作。
在你的view/html中:
<md-sidenav #sidenav align="start" mode="side" opened>
...
</md-sidenav/>
在您的打字稿文件中:
import { ViewChild, HostListener } from '@angular/core';
import { MdSidenav } from '@angular/material';
export class ClassName implements AfterViewInit {
@ViewChild('sidenav') sidenav: MdSidenav;
constructor() {}
@HostListener('window:resize', [$event])
onResize(event): void {
if (this.sidenav !== undefined) {
if (event.target.innerWidth <= 500) { // This can be any value.
this.sidenav.close();
} else {
this.sidenav.open();
}
}
}
}
使用这种方法,每次执行 window 调整大小事件时,onResize 方法都会 运行。
您的查看文件: 您必须在组件 html 文件中添加 #sidenav 文档引用变量。
<mat-sidenav #sidenav>
...
</mat-sidenav>
您的 TS 文件: 您在 html 文件中声明的变量,您可以在 @viewchild 的帮助下访问组件 ts 文件中的该变量,请不要忘记将 sidenav 的类型定义为 MatSidenav。之后,您可以轻松访问 MatSidenav 上可用的所有方法,如关闭、打开、切换等。
import { Component, OnInit, ViewChild } from '@angular/core';
import { MatSidenav } from '@angular/material';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
@ViewChild('sidenav') sidenav: MatSidenav;
constructor(){
}
ngOnInit(){}
toggleSideNav(){
this.sidenav.toggle();
}
}