【发布时间】:2018-09-01 14:59:01
【问题描述】:
我正在构建一个属性指令,它应该获取几个模板,这些模板又应该包含用于过滤的额外数据,这些数据稍后将用于选择所需的模板。 所以我对 TemplatePortalDirective 进行了如下扩展:
@Directive({
selector: "[filter]ng-template"
})
export class FilterableTemplateDirective extends TemplatePortalDirective {
@Input() filter: string;
constructor(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef
{
super(templateRef, viewContainerRef);
}
}
我的属性指令,名为TemplateSelector 有一个@Input,它也用作属性选择器:
@Directive({
selector: "[templateSelector]"
})
...
@Input("templateSelector") templates: FilterableTemplateDirective[]
现在,假设我有以下模板:
<div templateSelector="[templateA, templateB]"></div>
<ng-template filter="div[data-type-a]" #templateA>
...
</ng-template>
<ng-template filter="div[data-type-b]" #templateB>
...
</ng-template>
所以,当我尝试从TemplateSelector 中的方法访问this.templates 时,我得到了数组,但它的类型是TemplateRef,即纯ng-template,没有额外的字段,虽然当我调试时我看到FilterableTemplateDirective 被构造了两次,在分配模板的数组之前,并且filter 也被分配了,尽管过滤器的分配发生在数组的分配之后模板。
我试图在构建数组时进行强制转换,如下所示:
<div templateSelector="[templateA as FilterableTemplateDirective, templateBtemplateA as FilterableTemplateDirective]"></div>
左右:
<div templateSelector="[<FilterableTemplateDirective>templateA, <FilterableTemplateDirective>templateBtemplateA]"></div>
两者都没有成功,应用程序只是崩溃,说它期待数组的结尾而不是 as 或尖括号...
【问题讨论】:
标签: angular angular5 angular2-directives angular-directive angular-template