【发布时间】:2018-06-12 20:56:39
【问题描述】:
我使用 angular(最新版本)和 angular 材质。
有 3 个组件:
- header.component,其中有一个右侧导航的控制按钮
- rigth-sidenav.component,其中是right-sidenav
- sidenav.component(这是左侧主菜单),该组件调用header.component、right-sidenav.component和content
如何从另一个组件打开/关闭 sidenav ? (在我的例子中,按钮在 header.component 中)。
尝试了以下选项(但出现错误:TypeError: this.RightSidenavComponent.rightSidenav is undefined):
header.component.html
<button mat-button (click)="toggleRightSidenav()">Toggle side nav</button>
header.component.ts
import { Component } from '@angular/core';
import { RightSidenavComponent } from '../right-sidenav/right-sidenav.component';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent {
constructor(public RightSidenavComponent:RightSidenavComponent) { }
toggleRightSidenav() {
this.RightSidenavComponent.rightSidenav.toggle();
}
}
sidenav.component.html
<mat-sidenav-container class="sidenav-container">
<mat-sidenav #sidenav mode="side" opened="true" class="sidenav"
[fixedInViewport]="true"> Sidenav </mat-sidenav>
<mat-sidenav-content>
<app-header></app-header>
<router-outlet></router-outlet>
<app-right-sidenav #rSidenav></app-right-sidenav>
</mat-sidenav-content>
</mat-sidenav-container>
sidenav.component.ts
import { Component, Directive, ViewChild } from '@angular/core';
import { RightSidenavComponent } from '../right-sidenav/right-sidenav.component';
@Component({
selector: 'app-sidenav',
templateUrl: './sidenav.component.html',
styleUrls: ['./sidenav.component.scss']
})
export class SidenavComponent {
@ViewChild('rSidenav') public rSidenav;
constructor(public RightSidenavComponent: RightSidenavComponent) {
this.RightSidenavComponent.rightSidenav = this.rSidenav;
}
}
right-sidenav.component.html
<mat-sidenav #rightSidenav mode="side" opened="true" class="rightSidenav"
[fixedInViewport]="true" [fixedTopGap]="250">
Sidenav
</mat-sidenav>
right-sidenav.component.ts
import { Component, Injectable } from '@angular/core';
@Component({
selector: 'app-right-sidenav',
templateUrl: './right-sidenav.component.html',
styleUrls: ['./right-sidenav.component.scss']
})
@Injectable()
export class RightSidenavComponent {
public rightSidenav: any;
constructor() { }
}
【问题讨论】:
-
在 right-sidenav.component.ts 中尝试将
public rightSidenav: any;更改为@ViewChild('rightSidenav') public rightSidenav: any; -
我认为如果你这样实现,你的左右侧导航(side nav)只需要一个组件
-
我还建议您格式化您的问题。代码 sn-p 仅适用于纯 html 、 java 脚本或 css 。检查它是否在角度 2 中工作。所以我建议你删除并进行正确的格式设置。
标签: angular typescript angular-material