J'ai un sidenav et une barre d'outils imbriquée
toolbar.html
<md-sidenav-container fullscreen>
<md-sidenav #sidenav mode="side" color="primary">
<md-toolbar color="primary"><span>Sidenav</span></md-toolbar>
<button md-button class="sidenav-link" (click)="sidenav.close()">
<md-icon>home</md-icon><span class="title"> HOME</span>
</button>
<button md-button class="sidenav-link" (click)="sidenav.close()">
<md-icon>home</md-icon><span class="title"> HOME</span>
</button>
</md-sidenav>
<app-toolbar [sidenav]="sidenav"></app-toolbar>
</md-sidenav-container>
sidenav.html
<md-toolbar color="primary">
<button md-button class="toolbar-menu-button"
(click)="sidenav.toggle(); isCollapsed = !isCollapsed">
<md-icon [@iconChange]="isCollapsed">menu</md-icon>
</button>
<span class="toolbar-spacer"></span>
<button md-button class="toolbar-link" >DASHBOARD</button>
<span class="toolbar-spacer"></span>
</md-toolbar>
https://plnkr.co/edit/up19ZNJyMt6uatqdI9uv?p=preview
Je voudrais fermer le sidenav jusqu'à l'icône d'accueil comme le tiroir de navigation
Ce problème est peu inhabituel. Comme le bouton de la barre d'outils contrôle l'état d'ouverture et de fermeture, j'ai dû ajouter un EventListener
pour passer l'état de sidenav
chaque fois que le bouton est cliqué.
Basé sur le drapeau event
, j'ai ajouté un ngStyle
qui maintiendra la largeur de sidenav
. Notez que le sidenav
est toujours ouvert maintenant [ajouter la propriété opened="true"
], car il est toujours visible. J'ai également fini par utiliser le drapeau émis de la barre d'outils pour le titre de "Sidenav". Vous pouvez le supprimer si vous devez montrer le "Sid" partiel.
De plus, comme le sidenav est toujours ouvert, j'ai ajouté des CSS personnalisés pour animer le changement de largeur.
toolbar.component.ts:
export class ToolbarComponent implements OnInit {
shortnav = true;
@Input() sidenav;
@Output()
change: EventEmitter<booelan> = new EventEmitter<boolean>();
constructor() {
console.log(this.sidenav);
}
ngOnInit() {
}
toggle(){
this.shortnav = !this.shortnav;
console.log("shortnav: " + this.shortnav)
this.change.emit(this.shortnav);
}
}
toolbar.component.html:
<button md-button class="toolbar-menu-button"
(click)="toggle(); isCollapsed = !isCollapsed">
sidenav.component.ts:
export class SidenavOverviewExample {
showSidenavTitle = false;
sidenavWidth = 2.75;
changeWidth(showShortNav){
if(showShortNav){
this.sidenavWidth = 2.5;
this.showSidenavTitle = false;
}
else{
this.sidenavWidth = 13;
this.showSidenavTitle = true;
}
}
}
sidenav.component.html:
<md-sidenav-container fullscreen>
<md-sidenav #sidenav mode="side"
color="primary"
opened="true"
[ngStyle]="{ 'width.em': sidenavWidth }"
class="animate-sidenav">
<md-toolbar color="primary">
<span *ngIf="showSidenavTitle">Sidenav</span>
</md-toolbar>
<button md-button class="sidenav-link" (click)="sidenav.close()">
<md-icon>home</md-icon><span class="title"> HOME</span>
</button>
<button md-button class="sidenav-link" (click)="sidenav.close()">
<md-icon>home</md-icon><span class="title"> HOME</span>
</button>
</md-sidenav>
<app-toolbar [sidenav]="sidenav" (change)="changeWidth($event)"></app-toolbar>
</md-sidenav-container>
sidenav.component.css:
.mat-sidenav-transition .mat-sidenav{
/* custom animation to grow and shrink width */
-webkit-transition: width .3s !important; /* For Safari 3.1 to 6.0 */
transition: width .3s !important;
}
J'espère que cela vous aide :)
Cela peut être réalisé en utilisant un simple hack CSS. Nous pouvons appeler les méthodes augmenter () et diminuer () qui modifie la largeur de sidenav en fonction d'un événement comme mouseenter et mouseleave ou dans votre cas onClick of "toolbar-menu-button"
<md-sidenav #sidenav mode="side" class="example-sidenav" [ngStyle]="{ 'width.em': sidenavWidth }" opened="true" (mouseover)="increase()" (mouseleave)="decrease()">
Cela augmentera la largeur de sidenav lorsque nous pointerons sur sidenav et diminuera la largeur lorsque nous pointerons le pointeur de la souris à un autre endroit.
increase(){
this.sidenavWidth = 15;
}
decrease(){
this.sidenavWidth = 4;
}
Jetez un œil à cette démo: - https://mini-sidenav.firebaseapp.com/
et le dépôt github: - https://github.com/Ravi-Rajpurohit/mini-md-sidenav
J'espère que ça aide :-)