Классический способ получить ссылку на элемент на странице через ViewChild, ContentChild и т.д. с указанием селектора.
Например
@ContentChild('element') element: ElementRef;
@ContentChild('template') template: TemplateRef<any>;
Как быть, когда заранее неизвестно по какому селектору искать элемент?
Подробнее:
Есть компонент, внутрь которого передаются шаблоны ng-template (TemplateRef). Каждый шаблон получает заранее неизвестные идентификаторы или шаблонные переменные:
// app.component.html
<app-foo>
<ng-template #one>One</ng-template>
<ng-template #two>Two</ng-template>
</app-foo>
Внутри компонента в зависимости от некоторых условий выводится один из полученных шаблонов:
// foo.component.html
<ng-template [ngTemplateOutlet]="GetTemplate('one')"></ng-template>
Как сделать что-то вроде такого:
// foo.component.ts
...
@ContentChildren(TemplateRef) templates: QuerySelector<TemplateRef<any>>;
...
private GetTemplate(name: string) {
const searchedTemplate = this.templates.get(name);
return searchedTemplate;
}