【发布时间】:2017-05-05 15:39:31
【问题描述】:
使用 Angular 4.0.3
我正在创建一个组件my-component,它的输入为value,并通过ng-template 作为内容传递。示例用法是:
<my-component [value]="value">
<ng-template let-value>
<p><strong>Value rendered in user supplied template: {{value}}</strong></p>
</ng-template>
</my-component>
my-component 的工作是确定用户是否在移动设备上。如果是,我们想渲染一个my-native-component。否则,它将呈现my-custom-component。
到目前为止,我的my-component 代码是:
@Component({
selector: 'my-component',
template: `
<my-custom-component *ngIf="useCustom" [value]="value">
<ng-template [ngTemplateOutlet]="templateVariable"></ng-template>
</my-custom-component>
<my-native-component *ngIf="!useCustom" [value]="value">
<ng-template [ngTemplateOutlet]="templateVariable"></ng-template>
</my-native-component>
`
})
class MyComponent {
@ContentChild(TemplateRef)
private templateVariable: TemplateRef;
@Input()
private value: string;
@Input()
private useCustom: bool = false;
}
为了简单起见,这里没有检查用户是否在移动设备上。而是添加了 useCustom 输入。
作为内容传递的模板被引用为templateVariable,并通过ng-template和ngTemplateOutlet作为新模板传递。
在此示例中,my-native-component 和 my-custom-component 相同,只是它们的名称不同。它们具有与my-component 相同的value 输入,并且还接收一个模板作为它们的内容。这就是my-native-component 的样子:
@Component({
selector: 'my-native-component',
template: `
<h3>my-native-component (value: {{value}})</h3>
<p>Rendered template:</p>
<ng-template [ngTemplateOutlet]="templateVariable" [ngOutletContext]="{$implicit: value}"></ng-template>
<p>Done</p>
`
})
class MyNativeComponent {
@ContentChild(TemplateRef)
private templateVariable: TemplateRef;
@Input()
private value: string;
}
我无法弄清楚为什么应用程序运行时传递的模板从不呈现。也许我对ng-template 的工作原理有误解?
完整的可运行代码在 Plunker -https://embed.plnkr.co/fiDECy5gamOLvjPo2uhN/
我做错了什么?
【问题讨论】:
-
没有
[ngOutletContext]。这是[ngTemplateOutletContext]。
标签: angular