【发布时间】:2019-11-18 23:28:30
【问题描述】:
我想在我的应用栏中有一个菜单,可以从子组件中获取其菜单项。我正在使用 Angular 材质“mat-menu”,并且能够显示菜单项,但似乎无法触发子组件上的关联功能。
app.component.html(父级):
<div>
<mat-toolbar style="display: flex; flex-direction: row; justify-content: space-between; margin-bottom: 12px">
<div>
<button type="button" mat-icon-button id="btnMore" [matMenuTriggerFor]="appMenu" [matMenuTriggerData]="menuData">
<mat-icon>more_horiz</mat-icon>
</button>
<mat-menu #appMenu="matMenu" xPosition="before">
<ng-template matMenuContent let-aliasMenuItems="menuItems">
<button mat-menu-item *ngFor="let item of aliasMenuItems" (click)="handleMenuAction(item.action)">
{{item.text}}
</button>
</ng-template>
</mat-menu>
</div>
</mat-toolbar>
</div>
<div>
<router-outlet></router-outlet>
</div>
这里是 app.component.ts(父级)。它从 appService 组件中检索菜单数据。它还(应该)执行回调。
ngOnInit() {
this.appService.getMenuData().subscribe(menuData => this.menuData = menuData);
}
handleMenuAction(action: Function) {
action();
}
这是子组件“company.component.ts”,它将其菜单项传递给 app.service,以便 app.component 可以检索它们。请注意,menuData 是一个对象,其中包含 string 类型的对象数组和回调 function。
ngOnInit(): void {
this._appService.setMenuData({
menuItems: [
{text: "Add Company", action: this.addCompany}
]});
}
addCompany(): void {
this._router.navigate(['/company', 0])
}
由于某种原因,我的 Chrome 开发工具中没有显示点击事件处理程序。我希望通过菜单点击来调用函数,而不仅仅是执行导航。
可能有更好的方法来解决这个问题。如果是这样,请提供一个示例的链接。 TIA。
编辑:Stackblitz 位于 https://stackblitz.com/edit/angular-nbzoe6
【问题讨论】:
-
提供一个堆栈闪电战
-
stackblitz.com/edit/angular-nbzoe6 忽略“找不到文件”错误……它们是错误的。
标签: javascript angular angular-material