[Step1] У меня есть объект "article", который имеет массив из нескольких элементов содержимого. В зависимости от типа элемента (например, заголовок / изображение), должен быть показан другой шаблон. Я не хочу явно иметь собственный компонент для этого, если в этом нет необходимости, поэтому я предполагаю, нужен ли ViewChild или ContentChild?
Я рассмотрел все вопросы, связанные с ngTemplate, но не нашелрешение пока нет. Я пытался переписать https://stackblitz.com/edit/angular-q1y2vz из ngTemplateOutlet с динамическим значением , но пока не получилось.
component.ts
articles: any[] = [ {
"id_seq": "1234",
"content":[
{
"id": "123456",
"order": 0,
"type": "header",
"data":
{
"text": "loremipsum"
}
},
{
"id": "234567",
"order": 1,
"type": "image",
"data":
{
"url": "http://www.google.de/image.jpg"
}
}]
}]
component.html
<ng-container *ngFor="let content of articles[0]?.content;">
<ng-container [ngTemplateOutlet]="content?.type">
</ng-container>
</ng-container>
<ng-template #header >
<p>I'm a header</p>
</ng-template>
<ng-template #image >
<p>I'm an image</p>
</ng-template>
В зависимости от синтаксиса и размещения кода в ngTemplateOutlet я получаю сообщение об ошибке
templateRef.createEmbeddedView не является функцией
или вообще ничего не отображается.
Если я набираю статическую строку, такую как "header", это работает. Так что я предполагаю, что контент? .Type - это не тот путь. С другой стороны, что-то вроде этого работает нормально:
<accordion>
<accordion-group heading="articlecontent" [isOpen]="isFirstOpen">
<div class="accordion_no_side_margin">
<accordion-group *ngFor="let content of articles[0]?.content"
[heading]="content?.type">
{{ content?.id }}
{{ content?.order }}
{{ content?.type }}
{{ content?.data }}
</accordion-group>
</div>
</accordion-group>
</accordion>
[Step2] В конечном итоге я хочу объединить оба фрагмента кода, чтобы ng-шаблон выполнялся внутри аккордеона.
[Step3] Позже я намереваюсь добавить ngTemplateOutletContext и предоставить некоторую информацию, но остальные шаги должны работать без проблем.
В данный момент я использую @ angular-devkit / core 8.1.3