Angular - выдача цикла с помощью ng-контейнера

Я хочу вызвать ng-шаблон из ngFor, используя ng-контейнер

Мой список является массивом и имеет список объектов. Одним из свойств объекта является заголовок, который можно увидеть в ng-шаблоне.

Html:

<ul>

    <li *ngFor='let item of list;let i = index'>

        <ng-container *ngTemplateOutlet="itemTemplate;context:item"></ng-container>

    </li>

</ul>

<ng-template #itemTemplate let-item="item">
    <p>{{ item?.title }}</p>
</ng-template>

Примечание. Проблема заключается в том, что элемент let не определен или является пустым объектом. что странно, так как я передаю его.

3 ответа

Решение

Ваше использование templateOutletContext немного неправильно

Вы могли бы использовать $implicit ключ для контекста, а затем привязать его к шаблону, как это:

<ul>
  <li *ngFor="let item of list">
    <ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item }">
    </ng-container>
  </li>
</ul>
<ng-template #itemTemplate let-item>
    <p>{{ item?.title }}</p>
</ng-template>

или с именованным ключом:

<ul>
  <li *ngFor="let item of list">
    <ng-container *ngTemplateOutlet="itemTemplate; context: { item: item }">
    </ng-container>
  </li>
</ul>
<ng-template #itemTemplate let-item="item">
    <p>{{ item?.title }}</p>
</ng-template>

Прежде всего ваш элемент должен находиться внутри области действия *ngFor. например, если вы хотите повторить

тег внутри тега. тогда код будет

<div *ngFor="item in items">
  <p>{{item}}</p>
</div>

Точно так же в вашем случае должно быть внутри

  • тег

    <ul>
    
        <li *ngFor='let item of list;let i = index'>
    
            <ng-container *ngTemplateOutlet="itemTemplate;context:item"></ng-container>
    <ng-template #itemTemplate let-item="item">
        <p>{{ item?.title }}</p>
    </ng-template>
    
        </li>
    
    </ul>
    
  • <ul>
      <li *ngFor="let i of list">
        <ng-container *ngTemplateOutlet="itemTemplate; context: { i: i }">
        </ng-container>
      </li>
    </ul>
    <ng-template #itemTemplate let-item="i">
        <p>{{ i?.title }}</p>
    </ng-template>
    
    Другие вопросы по тегам