简化:
我的app-root
元素有这个模板:
<div *ngFor="let item of [1,2,3,4,5,6]">
<card *appDelay="100 * item" [num]="item">
{{item}}
</card>
</div>
它使用结构指令完成所有工作。
Plunker : The appDelay
create dynamic component with a delay + sequentials numbers.
它与this.viewContainerRef.createEmbeddedView
但是现在(出于学习目的)我希望不使用{{item}}
,而是通过item
将card
发送到@input
名为num
:
显然我已经添加了
@Input()
num : number = 0;
到CardComponent
组件并且还为createEmbeddedView
方法添加了上下文:
this.viewContainerRef.createEmbeddedView(this.templateRef,{$implicit: {num: time} });
问题
似乎我试图通过两个方向来做这件事:
1)模板的上下文
2)@input
变量
但没有效果。 (我没有看到数字)。
如何设置自己的号码(上下文|| @input)?
答案 0 :(得分:2)
<card *appDelay="500 * item; let num">
{{num}}
</card>
等同于
<ng-template [appDelay]="500 * item" let-num="$implicit">
<card>
{{num}}
</card>
</ng-template>
和内部指令
this.viewContainerRef.createEmbeddedView(this.templateRef,{$implicit:time/500 });
<强> Plunker Example 强>
答案 1 :(得分:1)
Okey所以我会这样做:
https://plnkr.co/edit/Qw9RFNWz18B9UQ6PWRfD?p=preview
ng-template
@ContentChild
ng-container
和[ngTemplateOutlet]
在您的卡组件中呈现模板[ngTemplateOutletContext]
并将变量$implicit
设置为num,($ implicit允许您使用let-yourVaiableName在模板上使用任何变量名称)let-num
以获取对模板上下文变量的引用希望这会有所帮助:)
很抱歉无法使代码内联工作:/