![](/img/trans.png)
[英]“Color” attribute does not work on <mat-toolbar> in a side navigation in Angular Materia
[英]trying to implement a side navigation with a toggle button in <mat-toolbar>?
我有一个带有一些细节的侧面导航面板。 在标题组件中,我有一个按钮可以切换侧面导航。 我已经使用 实现了一个工具栏。我的要求是当我点击那个按钮时,侧边导航应该切换进出。 如何实施?
我的 navigation.component.html:
<mat-toolbar>
</mat-toolbar>
<mat-sidenav-container>
<mat-list>
<mat-list-item>Accounts</mat-list-item>
<mat-list-item>UserProfile</mat-list-item>
<mat-list-item>Contact me</mat-list-item>
<mat-list-item>Gspeed</mat-list-item>
</mat-list>
</mat-sidenav-container>
头文件.component.html
<body [ngClass]="selectedStyle" ><div >
<select [(ngModel)]="selectedStyle" >
<option *ngFor="let s of styles" [ngValue]="s">{{s}}</option>
</select>
<button mat-icon-button (click)="toggleSidenav()">
<mat-icon >Details</mat-icon></button>
</div>
</body>
app.component.ts
import { Component, OnInit,Output,EventEmitter } from '@angular/core';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.css']
})
export class HeaderComponent implements OnInit {
styles: string[] = [];
selectedStyle: string;
open: false;
toggleSidenav(){
open: !this.open;
}
constructor() {
}
ngOnInit(){
this.styles = ['red','green','blue','none'];
}
}
更改您的 togglelSSideNav() 函数并使用 ngIf 检查打开状态
toggleSidenav(){
this.open=!this.open;
}
编辑:这是根据复杂的组件层次结构回答问题。 我没有意识到您的标题和侧边栏组件都在应用程序组件中。 在这种情况下,这是一个微不足道的解决方案。
执行此操作的两种常见方法是
通过这个,我的意思是你有一系列的 child -> parent 事件处理关系,如下所示:
<child (event)="handleEvent($event)">
</child>
其中 event 是一些事件发射器发出T
事件: @Output() event: EventEmitter<T> = new EventEmitter<T>();
然后当你冒泡到共同祖先时,你有一系列父 - > 子关系,如下所示:
<child [childEventResult]="eventResult">
</child>
其中eventResult
是类型的某些属性T
和childEventResult
被类型的一些输入属性T
: @Input() eventResult: T;
.
如果您有一个复杂的组件层次结构,或者想要更改层次结构,这是一种乏味的方法。
将公共服务注入到两个组件中。 在服务上设置一个主题。 感兴趣的组件(侧边栏)将订阅主题,事件源组件(标题)将在事件发生时向主题发送新值。
export class MyService {
private sidebarChange$: Subject<boolean> = new Subject<boolean>();
// header updates the subject via this method
updateSidebar(visible: boolean): void {
this.sidebarChange$.next(visible);
}
// Sidebar subscribes to this. Needs a more suitable name
sidebarChange(): Observable<boolean> {
return this.sidebarChange$.asObservable();
}
}
如果您有一个复杂的组件结构,这种方法会更好,但我觉得有点不确定将纯 UI 问题泄漏到我的服务中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.