angular - 将变量传递给 ng-content
问题描述
如何将 ngFor 变量传递给 ng-content 模板。
例如,包含组件:
<ul>
<li *ngFor="let item of itemsArray">
<ng-content></ng-content>
</li>
</ul>
嵌套的内容组件:
<div>
<span *ngIf="item.type_one"></span>
<span *ngIf="item.type_two"></span>
</div>
例如,两者:
<containing-component>
<content-component>
</content-component>
</containing-component>
解决方案
您不能ng-content
用作动态模板。ng-template
改为使用
<ul>
<li *ngFor="let item of itemsArray">
<ng-container *ngTemplateOutlet="itemTemplate; context: { $implicit: item }">
</ng-container>
</li>
</ul>
export class ContainingComponent {
...
@ContentChild(TemplateRef, {static: true})
@Input() itemTemplate: TemplateRef<any>;
}
因此,您可以将动态模板引用到containing-component
. 在这种情况下,您可以将 ng-template 包裹起来content-component
<containing-component [itemTemplate]="itemTmpl">
</containing-component>
<ng-template #itemTmpl let-data>
<content-component
[item]="data">
</content-component>
</ng-template>
或使用ng-template directly
:
<containing-component
[itemTemplate]="itemTmpl"
[itemArray]="items">
</containing-component>
<ng-template #itemTmpl let-data>
<div>
<span *ngIf="data.type_one"></span>
<span *ngIf="data.type_two"></span>
</div>
</ng-template>
推荐阅读
- javascript - 如何使复选框的文本也切换
- arduino - 如何从磁力计、加速度计和陀螺仪获得准确的航向
- android - 如何在 Room 数据库中调用更改来更新 UI?
- python - 我想使用带有变量的 wget 作为参数
- haskell - 这个简单的 do notation desugar 是为了什么?
- python - 为什么我们需要'for循环'的变量?
- apache - 如何在 dotnet 命令运行的 ASP.NET Blazor WebAssembly 6 中使用子域、虚拟主机(没有显式端口 80、5000、5001)?
- sql - 按小时汇总记录 + 添加子查询
- python - Sublime Text 4:Tools>Build 什么都不做
- julia - 在 Julia 中推广 nlsolve 函数的输入