Angular материал `mat-menu-item` не ведет себя как элементы меню, когда является частью шаблона - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать гибкое адаптивное меню с помощью angular / material / flex.

Чтобы определить, находится ли браузер в малом режиме или нет, я использую MediaObserver, и он выдает deviceXs логическое значение, когда браузер (или мобильный) маленький.

В маленьком режиме браузера я хочу, чтобы меню было выпадающим из гамбургера, а в полном виде =

Вот его упрощенная версия:

    <mat-toolbar class="sticky">
      <mat-toolbar-row fxLayoutAlign="space-between center">
        <div fxLayout="row">
          <ng-container *ngIf="deviceXs; else mainMenuTemplate">
            <button mat-icon-button [matMenuTriggerFor]="mainMenu">
              <mat-icon>menu</mat-icon>
            </button>
          </ng-container>
        </div>
      </mat-toolbar-row>
    </mat-toolbar>
    
    <ng-template #mainMenuTemplate>
      <button mat-menu-item [matMenuTriggerFor]="aMenu">Menu item A</button>
    </ng-template>
    
    <mat-menu #mainMenu="matMenu">
      <ng-template [ngTemplateOutlet]="mainMenuTemplate"></ng-template>
    </mat-menu>
    
    <mat-menu #aMenu="matMenu">
      <button mat-menu-item>A-a</button>
      <button mat-menu-item>A-b</button>
    </mat-menu>

Работает ааааалмот, просто я ожидаю, что он будет работать, кроме одного. В режиме XS button mat-menu-item работает иначе, когда является частью ng-template.

Вот ожидаемое нормальное поведение меню:

normal behaviour of the dropdow menu

and here's how it behaves when part of the ng-template

странное поведение, когда часть ng-template

Не могли бы вы подсказать мне, как заставить это меню работать так, как ожидалось? Или, может быть, есть другой, более правильный подход?

Спасибо!

...