@Cruper
web-падаван

Как получить ссылку на элемент внутри функции angular 2+?

Классический способ получить ссылку на элемент на странице через 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;
}
  • Вопрос задан
  • 839 просмотров
Решения вопроса 1
@Cruper Автор вопроса
web-падаван
Решение через директиву:
@Input() appTemplateName: string;

constructor(protected template: TemplateRef<any>) { }

public get Template(): TemplateRef<any> {
    return this.template;
}


<ng-template appTemplateName="title">...</ng-template>


@ContentChildren(TemplateNameDirective) templates: QueryList<TemplateNameDirective>;
...
return this.templates.find(template => template.appTemplateName === requiredName).Template;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы