Angular 9: получить компонент из ElementRef - PullRequest
0 голосов
/ 21 июня 2020

У меня есть Директива, которую я бы применил к форме. Предполагается, что все компоненты MyFormWrapper находятся внутри этой формы, а в форме submit () следует вызвать метод activate () для каждого. Поскольку у Директивы нет представления, я не могу использовать @ViewChildren и @ ContentChildren.

Мой план - сканировать дерево DOM и получить ElementRefs из <my-form-element>. Эта часть проста. Сейчас мне не хватает того, как преобразовать ElementRef в экземпляр компонента MyFormWrapper. Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 21 июня 2020

Я думаю, вы хотите обновить ElementRef до ComponentRef.

Я думаю, что этот код в обратном направлении - это то, что вам нужно:

// constructor services
private readonly renderer: Renderer2,
private readonly resolver: ComponentFactoryResolver,
private readonly injector: Injector,
private readonly app: ApplicationRef

// Generation
const factorySpinner: ComponentFactory<MatSpinner> = this.resolver.resolveComponentFactory(MatSpinner);
const refSpinner: ComponentRef<MatSpinner> = factorySpinner.create(this.injector);
this.app.attachView(refSpinner.hostView);
refSpinner.instance.color = "accent";
refSpinner.instance.diameter = 24;
const elSpinner: ElementRef<MatSpinner> = refSpinner.location;
const oSpinner: MatSpinner = elSpinner.nativeElement;
...