Угловые вкладки материалов с пользовательскими компонентами

#angular #tabs #angular-material #mat-tab

#угловые #вкладки #угловые вкладки материалов #коврик-вкладка

Вопрос:

У меня есть список объектов, которые я использую для создания вкладок материалов как таковых:

   <mat-tab-group>
    <mat-tab *ngFor="let tripOption of tripOptions">
      <ng-template mat-tab-label>
        <mat-icon class="svg-frq-light-blue new-trip-image" svgIcon="{{tripOption.name}}"></mat-icon>
      </ng-template>

        //component would go here

    </mat-tab>
  </mat-tab-group>
  

Мне нужно добавить отдельный угловой компонент на каждую вкладку. Есть ли способ, с помощью которого я, возможно, могу добавить компонент к каждому объекту tripOption, а затем каким-то образом внедрить его сюда из указанного объекта?
Есть ли достойный способ сделать это или мне действительно нужно написать вкладку для каждого элемента в списке?

Комментарии:

1. Вы смотрели на angular.io/guide/dynamic-component-loader ?

Ответ №1:

Вы могли бы использовать собственный ngSwitch от Angular для добавления различных компонентов к каждой вкладке в соответствии с вашей бизнес-логикой, а затем исключить общие части из ngSwitch. Что-то вроде этого:

 <mat-tab-group>
    <mat-tab *ngFor="let tripOption of tripOptions">
        <ng-template mat-tab-label>
            <mat-icon class="svg-frq-light-blue new-trip-image" svgIcon="{{tripOption.name}}"></mat-icon>
        </ng-template>

        <h1>Common code</h1>
        <ng-container [ngSwitch]="tripOption.name">
            <app-brazil-trip *ngSwitchCase="'Brazil'"></app-brazil-trip>
            <app-indonesia-trip *ngSwitchCase="'Indonesia'"></app-indonesia-trip>
            <app-chile-trip *ngSwitchCase="'Chile'"></app-chile-trip>
            <span *ngSwitchDefault>Trip not found!</span>
        </ng-container>
    </mat-tab>
</mat-tab-group>
  

Ответ №2:

Используйте привязку innerHTML с некоторой логикой в вашем компоненте.

Может сработать что-то вроде этого:

 <div [innerHTML]="myComponentStr(tripOption.id)"></div>
  

Подробная информация:
https://alligator.io/angular/innerhtml-binding-angular/

Ответ №3:

Вам нужно попробовать эти вкладки,https://www.npmjs.com/package/@codehint-ng/tabs

Эти элементы управления позволяют гибко и раздельно размещать содержимое вкладок