【发布时间】:2019-01-16 08:58:26
【问题描述】:
我在“标题组件”中使用来自 Angular Material 的 MatMenu。我只需要在某些条件下打开菜单。但是这个方法只在 ngAfterViewInit() 中起作用,在视图被加载之后。
export class HeaderComponent implements AfterViewInit {
@ViewChild('triggerCart') trigger: MatMenuTrigger;
ngAfterViewInit() {
this.openMenu();
}
openMenu() {
this.trigger.openMenu();
}
}
<button mat-button
[matMenuTriggerFor]="shoppingCartMenu"
#triggerCart="matMenuTrigger"
(menuOpened)="isOpened($event)"
(mouseenter)="largeScreen ? triggerCart.openMenu() : ''">
</button>
我需要从另一个组件调用此方法,但菜单触发器在 ngAfterViewInit 之外未定义。
<button mat-stroked-button
(click)="someMethod()">
</button>
export class ProductDetailComponent {
@ViewChild(HeaderComponent) header: HeaderComponent;
someMethod() {
this.header.openMenu();
}
}
我的 Header 组件加载后如何实现组件之间的通信?
【问题讨论】:
-
我不确定您是否可以查询选择也有分配的模板参考。
#triggerCart="matMenuTrigger"可能与@ViewChild('triggerCard')不匹配。我是说我不确定,但是如果您将另一个#something添加到同一个元素并尝试查询它会怎样。 -
#triggerCart="matMenuTrigger"实际上匹配@ViewChild('triggerCard')并在我的组件中工作。但仅限于ngAfterViewInit()方法内。 -
这意味着在标题组件完成附加视图之前调用
someMethod()。someMethod()什么时候被调用? -
我在
ProductDetailComponent视图中有一个(click)事件。HeaderComponent内的“菜单”需要通过来自ProductDetailComponent的点击来触发。
标签: angular typescript angular-material