【发布时间】:2017-10-30 18:30:30
【问题描述】:
我有一个简单的组件,它通过名为 *appDelay 的自定义指令在延迟后注入数字
我已经知道* 是 Angular 将语法脱糖成类似
<ng-template ...>
...actual markup
</ng-template>
我也知道我们可以通过以下方式将组件/模板注入viewContainer:
this.viewContainerRef.createEmbeddedView/Component(this.templateRef);
指令代码是:
@Directive({
selector: '[appDelay]'
})
export class DelayDirective {
constructor(
private templateRef: TemplateRef<any>,private viewContainerRef: ViewContainerRef
) { }
@Input() set appDelay(time: number): void {
setTimeout(()=>{
this.viewContainerRef.createEmbeddedView(this.templateRef);
}, time);
}
}
文档说明:
要访问元素的 ViewContainerRef,您可以放置一个 在元素上注入 ViewContainerRef 的指令,或者您获得 它通过 ViewChild 查询。
问题:
一般的伪形式:templateRef 和 viewContainerRef 的模板“字符串值”是什么?
恕我直言,脱糖模板类似于:
<ng-tempalte ...>
<card *appDelay="500 * item">
{{item}}
</card>
</ng-template>
所以ViewContainerRef 将是对<ng-tempalte ...> 的引用
templateRef 将引用<card >...</card>
——对吗?
(另外,是否可以console.log() 那些 HTML 模板并查看实际标记?
【问题讨论】:
-
你可能会发现this article很有用
标签: javascript angular