Angular - 使用ng-container循环问题

时间:2017-11-28 10:16:39

标签: angular angular5 ng-template ng-container

我想在使用ng-container

的ngFor中调用ng-template

我的列表是一个数组,有一个对象列表。对象的一个​​属性是标题 - 在ng-template中看到。

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-item似乎是未定义的或是一个空对象。 这是奇怪的,因为我传递它。

3 个答案:

答案 0 :(得分:1)

您使用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>

答案 1 :(得分:0)

首先,你的元素必须在* 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>
    
  • 答案 2 :(得分:0)

    <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>