在我的组件中,我使用 ViewChildren 获得了它的标记模板列表:
@ViewChildren(TemplateRef) private _templates: QueryList<TemplateRef<unknown>>;
在 Angular8 中,我无法通过 Id 过滤它们,所以我需要寻找一个内部属性——这在某种程度上有点 hacky:
let template = this._templates.find(t => (<any>t)._def.references[id]) : null;
现在,使用 Angular 9,这不再适用了。我检查了对象并发现了一个新的“hack”:
this._templates.find(t => (<any>t)._declarationTContainer?.localNames?.includes(id)) : null;
但是对于这种情况有什么新的或干净的解决方案吗?
仍然希望有一个没有自定义指令的解决方案,例如。MatTab 也可能做类似的事情:
<mat-tab>
<ng-template mat-tab-label>
...
</ng-template>
<ng-template matTabContent>
...
</ng-template>
</mat-tab>