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