【发布时间】:2018-07-02 07:39:26
【问题描述】:
我使用 angular 6 和 angular-material。 右键单击打开 matMenu 以将其用作上下文菜单。 我当前的代码如下所示。
<span #contextMenuTrigger [matMenuTriggerFor]="contextMenu"></span>
<button (contextmenu)="openContextMenu($event)" mat-button >Open Context Menu</button>
<mat-menu #contextMenu="matMenu">
<ng-container *ngFor="let item of config.items">
<button mat-menu-item [matMenuTriggerFor]="submenu" (click)="actionSelected(item.label)">{{ item.label }}</button>
<mat-menu #submenu="matMenu">
<button *ngFor="let subItem of item.submenu" mat-menu-item (click)="actionSelected(subItem.label)">{{ subItem.label }}</button>
</mat-menu>
</ng-container>
</mat-menu>
我正在像这样在我的打字稿组件类中以编程方式打开菜单。
@ViewChild('contextMenuTrigger', {read: MatMenuTrigger}) contextMenuTrigger:MatMenuTrigger;
ngOnInit() {
}
openContextMenu(e) {
e.preventDefault();
this.contextMenuTrigger.openMenu();
}
一切正常。
现在,对于真正的场景,我想要的是,我希望从父组件打开这个上下文菜单。 所以我把这部分移到了 app.component.html
<span #contextMenuTrigger [matMenuTriggerFor]="contextMenu"></span>
<button (contextmenu)="openContextMenu($event)" mat-button >Open Context Menu</button>
我使用 EventEmitter 将 MatMenu 的实例(即 contextMenu)传递给父级。
但我的问题是如何在父组件中分配 matMenuTriggerFor 属性。 如果我将其从跨度中删除,则给出错误。
AppComponent.html:1 ERROR Error: mat-menu-trigger: must pass in an mat-menu instance.
当我做document.getElementById("span id").matMenuTriggerFor = my menu instance时也不工作。
请提出任何建议。如果需要任何进一步的信息,请告诉我。
【问题讨论】:
-
我认为这是同一个问题:stackoverflow.com/questions/48343082/…
标签: angular typescript angular-material