问题
Angular 2.2版本之后。 *,我注意到我的应用程序的某些组件出现了问题,即在更新数据后,视图中的数据是错误的(它显示的列表大小合适,但仅包含第一项的数据)。
示范
我创建了this Plunker with a simple example问题。
此类用途会导致问题:
<list-component [data]="list">
<template pTemplate let-item>
<b *ngIf="item % 2 == 0">{{item}}</b>
<del *ngIf="item % 2 != 0">{{item}}</del>
</template>
</list-component>
发生问题的说明:
*ngIf
的模板:))*ngIf
:)的模板; 问题
导致此问题的原因以及如何解决?
答案 0 :(得分:5)
使用* ngIf的内部模板中有几个TemplateRef
。当数据被改变时,它是混合的。
1)因此,您必须指定您正在使用的ng-content中的哪个模板,例如:
<list-component [data]="list">
<template #tmpl let-item> <== notice #tmpl
<b *ngIf="item % 2 == 0">{{item}}</b>
<del *ngIf="item % 2 != 0">{{item}}</del>
</template>
</list-component>
然后在ListComponent中:
@ContentChild('tmpl') template: TemplateRef<any>;
<强> Plunker Example 强>
P.S。但为什么你没有使用ngTemplateOutlet
或ngForTemplate
解决方案?
例如:
2)我在你的示例PrimeTemplate
指令中注意到了。所以这是第二个选择:
@ContentChild(PrimeTemplate) primeTmpl: PrimeTemplate;
和html:
<template-loader [data]="item" [template]="primeTmpl.template"></template-loader>
<强> Plunker Example 强>