Обычно, если вы не можете использовать компонент, вы можете использовать шаблон и контейнеры для многократного отображения одного и того же контента.
В приведенном ниже примере я заменил элементы container-2
на ng-container
компоненты.В другом месте я добавил компонент ng-template
и поместил container-2
в контент.Наконец, я связываю их, помещая директивы *ngTemplateOutlet
в контейнеры и передавая им ссылку на шаблон с помощью переменной шаблона.
<content1>
<mat-horizontal-stepper *ngIf="somevar" >
<ng-container *ngTemplateOutlet="content2Template"></ng-container>
</mat-horizontal-stepper>
<mat-vertical-stepper *ngIf="!somevar" >
<ng-container *ngTemplateOutlet="content2Template"></ng-container>
</mat-vertical-stepper>
</content1>
<ng-template #content2Template>
<content2></content2>
</ng-template>
Однако этот метод не будет работать, если вы используетеугловой материал Stepper и Steps.Причина в том, что компоненты Step ожидают, что в него будет введен компонент-предок Stepper.Поскольку вы хотите повторно использовать шаблоны, они должны быть больше, чем Steppers, поэтому у вас нет возможности удовлетворить эти требования к инъекции.Описанный выше метод не будет работать в любой ситуации, когда дочерний компонент ожидает, что родительский объект будет введен.
Единственным другим решением было бы использование шаблонов для самого содержимого.Таким образом, пока компоненты шага повторяются, формы внутри них не будут.Предположительно, формы будут основой содержания, поэтому повторений не будет.
<mat-vertical-stepper> *ngIf="somevar"
<mat-step label="Step 1" >
<ng-container *ngTemplateOutlet="Content1"></ng-container>
</mat-step>
<mat-step label="Step 2">
<ng-container *ngTemplateOutlet="Content2"></ng-container>
</mat-step>
</mat-vertical-stepper>
<mat-horizontal-stepper>
<ng-template #tmplt let-stepper *ngIf="!somevar">
<mat-step label="Step 1" >
<ng-container *ngTemplateOutlet="Content1"></ng-container>
</mat-step>
<mat-step label="Step 2">
<ng-container *ngTemplateOutlet="Content2"></ng-container>
</mat-step>
</ng-template>
<ng-container *ngTemplateOutlet="tmplt"></ng-container>
</mat-horizontal-stepper>
<ng-template #Content1>Content1</ng-template>
<ng-template #Content2>Content2</ng-template>