Как динамически прикрепить matMenuTriggerFor к элементу DOM в меню материалов Angular?

При добавлении меню материалов Angular в таблицу Angular у меня возникают проблемы с производительностью. Угловая таблица материалов с тысячами строк создает тысячи компонентов меню мата. Из-за этого загрузка страницы занимает слишком много времени.

Это мой пример кода.

    <table>
      <tr *ngFor = "let el of [1,2,3,4,5]">
        <td>Text line of menu {{el}}</td>
        <td style = "width: 5%">
        <button mat-icon-button [matMenuTriggerFor] = "abc.menu" class = "center-block">
            <i class = "material-icons">more_vert</i>
        </button>

        <app-desposition #abc = "menuComponent" [user] = "row.policyObj"></app-desposition>
        </td>
  </tr>
</table>

<app-desposition> - это еще один компонент Angular с шаблоном меню mat.

Это шаблон <app-desposition>

<mat-menu #menu = "matMenu" class = "d-menu-container">

  <div class = "desposition-menu">

    <div (click) = "$event.stopPropagation()">
          <mat-input-container class = "col-md-12">
              <textarea [(ngModel)] = "message" matInput id = "message" name = "body" rows = "2" placeholder = "Click here to write comment"></textarea>
          </mat-input-container>
      </div>

    <mat-radio-group [(ngModel)] = "selectedDesposition" (click) = "$event.stopPropagation()">   

      <div mat-menu-item *ngFor = "let menu of menuItems">
        <mat-radio-button class = "radioText" [value] = "menu.getName()">
          <span class = "wrap-mat-radio-label" style = "font-style:unset; font-size: 12px">{{menu.getName()}}</span>
        </mat-radio-button> 
      </div>
    </mat-radio-group>
  </div>

  <div mat-menu-item (click) = "$event.stopPropagation()">
      <span *ngIf = "uiStatus.getSuccess() else uiElse" style = "text-color:green">{{uiStatus.getMessage()}}</span>

      <ng-template #uiElse><span style = "text-color:red">{{uiStatus.getMessage()}}</span></ng-template>
  </div>

  <div mat-menu-item  (click) = "$event.stopPropagation()">
    <button  mat-raised-button color = "warn" style = "width:100%"  (click) = "onSelect()">
      SAVE
    </button>  
  </div>

</mat-menu>

Я хочу, чтобы компонент осаждения создавался динамически (я могу это сделать), но я не знаю, как прикрепить [matMenuTriggerFor] к меню, которое находится внутри динамически создаваемого компонента.

Пожалуйста, помогите кому-нибудь?

Для справки @jpavel сделал что-то похожее на меня на stackbliz. Вот ссылка. Angular Material 2 MatMenu - Динамическое создание

попробуйте функцию отложенной загрузки: material.angular.io/components/menu/overview#lazy-rendering. И дайте мне знать, помогло ли это

julianobrasil 28.04.2018 05:25

@jpavel сработало. Теперь в моем списке более 1000 элементов, и он загружается очень быстро. Спасибо.

Sagar Yadav 30.04.2018 06:57
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
2
2 271
1

Ответы 1

Вы можете установить это с помощью ViewChild Проверить этот пример https://stackblitz.com/edit/dynamic-nested-menus?file=app%2Fmenu-item%2Fmenu-item.component.html

Другие вопросы по теме