angular - Obter todas as instâncias de componentes na aplicação atual
Estou procurando uma maneira de obter todas as instâncias de componentes atualmente exibidas para o usuário (e, se possível, também obter todas as instâncias de serviços).
Pensei em usar ApplicationRef, mas ele só fornece a referência do appComponent.
Eu também tentei o Injector, mas você precisa dar explicitamente a classe para obter a instância do componente.
Finalmente, também tentei com o Router, mas sem sucesso.
Existe uma maneira de obter todas as instâncias de componentes em uma aplicação Angular?
Eu também devo declarar que todos os meus componentes são roteados e a maioria deles é carregada de forma preguiçosa.
EDITAR: caso de uso
Estou tentando implementar um gerenciador de eventos semelhante aos hooks do ciclo de vida do Angular. Isso significa que eu poderia escrever meu componente assim
export class MyComponent implements EventManager {
onCustomEvent(event) {...}
}
Resposta #1
Você quer dizer algo assim?
import { ....ComponentFactoryResolver } from '@angular/core';
export class Test{
constructor(
private resolver: ComponentFactoryResolver
) {
const factories = Array.from(this.resolver['_factories'].keys());
console.log(factories);
}
}
Resposta #2
Ok, então finalmente encontrei uma maneira de fazer isso: decoradores.
Aqui está o decorador :
export function MsEvents(): ClassDecorator {
const eventManager = AppModule.injector.get(EventManagerService);
return function (instance) {
eventManager.onCustomEvent().subscribe(arg => instance.prototype['onCustomEvent'](arg));
};
}
Com este decorador, posso chamar funções definidas nos meus componentes (neste caso onCustomEvent). Tudo o que é necessário é
- este decorador
- uma interface que os componentes irão implementar
uma referência estática ao injetor no módulo do aplicativo :
export class AppModule { static injector: Injector; constructor(injector: Injector) { AppModule.injector = injector; } }
