【发布时间】:2019-07-24 19:50:37
【问题描述】:
我得到的组件
假设我有以下超级简单的组件:
class MyComponent {
@Input()
simpleContent: string;
@ContentChild(TemplateRef)
content: TemplateRef<any>;
}
<div>
<div *ngIf="simpleContent; else complexContent">{{simpleContent}}</div>
<ng-template #complexContent>
<ng-container [ngTemplateOutlet]="content"></ng-container>
</ng-template>
</div>
根据用户的选择,可以这样使用:
<my-component simpleContent="Hello world!"></my-component>
也可以这样使用:
<my-component>
<ng-template>Hello world!</ng-template>
</my-component>
虽然第二个选项允许嵌入 HTML,因此可以使用更复杂的格式,但在大多数情况下,用户可以选择仅包含一个属性的简单方法。
问题
我想简化组件并去掉模板中的 if/else。我想像这样:
class MyComponent {
@ContentChild(TemplateRef)
content: TemplateRef<any>;
@Input()
set simpleContent(value: string) {
this.content = new TemplateRef(value);
}
}
<div>
<ng-container [ngTemplateOutlet]="content"></ng-container>
</div>
显然这不起作用,因为new TemplateRef(value) 是不可能的。
有没有办法在运行时动态创建一个基本的简单模板?
【问题讨论】:
-
我认为这种方法:stackblitz.com/edit/… 更适合您的用例。
-
我不明白你为什么不使用
ng-content?因此客户端决定在组件<my-component>simple or complex</my-component>中使用简单内容还是复杂内容,因为这两个内容将在同一个<div>(布局)中
标签: angular