【发布时间】:2021-03-24 05:17:40
【问题描述】:
我们希望将一个大菜单(例如 material components docs 中的 Nested menu 示例)拆分为单独的较小组件。
例如在这个Stackblitz example 中,我们将鱼菜单移到了一个单独的组件中:fish-menu.component.ts:
import { Component } from "@angular/core";
@Component({
selector: "fish-menu",
template: `
<button mat-menu-item [matMenuTriggerFor]="fish">Fishes</button>
<mat-menu #fish="matMenu">
<button mat-menu-item>Baikal oilfish</button>
<button mat-menu-item>Bala shark</button>
<button mat-menu-item>Ballan wrasse</button>
<button mat-menu-item>Bamboo shark</button>
<button mat-menu-item>Banded killifish</button>
</mat-menu>
`
})
export class FishMenuComponent {}
并将其包含在parent menu 中,如下所示:
<button mat-button [matMenuTriggerFor]="animals">Animal index</button>
<mat-menu #animals="matMenu">
<button mat-menu-item [matMenuTriggerFor]="vertebrates">Vertebrates</button>
<button mat-menu-item [matMenuTriggerFor]="invertebrates">Invertebrates</button>
</mat-menu>
<mat-menu #vertebrates="matMenu">
<!-- our child-component does not work as expected -->
<fish-menu></fish-menu>
<!-- other children are okay -->
<button mat-menu-item [matMenuTriggerFor]="amphibians">Amphibians</button>
<!-- etc. -->
但是当我们悬停菜单项时,包含的菜单无法按预期工作:
- 鱼菜单没有打开(除非我们点击它)
- 其他菜单未关闭(鱼菜单打开时)
注意
我们希望在子组件中包含完整菜单:即带有matMenuTriggerFor 的按钮和相关的mat-menu(因为同一个菜单应该包含在生产应用程序的多个位置)。并且父菜单并不总是相同的:即我们有许多不同的父菜单,它们由不同的子菜单组成。
我们如何才能使这项工作按预期进行?
【问题讨论】:
-
不是答案,但可以考虑:stackblitz.com/edit/dynamic-nested-menus