Angular 获取当前应用程序中的所有组件实例

Angular 获取当前应用程序中的所有组件实例,angular,typescript,Angular,Typescript,我正在寻找一种方法来获取当前显示给用户的所有组件实例,如果可能,还可以获取所有服务实例 我考虑过使用ApplicationRef,但它只提供appComponent引用 我还尝试了注入器,但是您必须显式地给出类来获取组件实例 最后,我也尝试了路由器,但没有成功 有没有办法获取角度应用程序中的所有组件实例 我还应该声明我的组件都是路由的,并且大多数都是延迟加载的 编辑:用例 我正在尝试实现一个类似于Angular lifecycle挂钩的事件管理器。这意味着我可以这样写我的组件 export cl

我正在寻找一种方法来获取当前显示给用户的所有组件实例,如果可能,还可以获取所有服务实例

我考虑过使用ApplicationRef,但它只提供appComponent引用

我还尝试了注入器,但是您必须显式地给出类来获取组件实例

最后,我也尝试了路由器,但没有成功

有没有办法获取角度应用程序中的所有组件实例

我还应该声明我的组件都是路由的,并且大多数都是延迟加载的

编辑:用例 我正在尝试实现一个类似于Angular lifecycle挂钩的事件管理器。这意味着我可以这样写我的组件

export class MyComponent implements EventManager {
  onCustomEvent(event) {...}
}

你是说像这样的事吗

    import { ....ComponentFactoryResolver } from '@angular/core';
export class Test{
      constructor(
        private resolver: ComponentFactoryResolver
      ) {
        const factories = Array.from(this.resolver['_factories'].keys());
        console.log(factories);
      }
}

我不知道angular本身是否有什么东西可以帮助你解决这个问题。但是,您可以通过创建一个名为SampleService的服务来存储对已创建组件的引用来解决这个问题

详情如下:

在您的component.ts中

export class MyComponent implements OnInit , OnDestroy{

    constructor(private readonly sampleService:SampleService) {}

    ngOnInit(){
         this.sampleService.addRef(this);
    }

    ngOnDestroy(){
        this.sampleService.removeRef(this);
    }
}

好吧,我终于找到了一种方法:装饰师

这是装饰师:

export function MsEvents(): ClassDecorator {

  const eventManager = AppModule.injector.get(EventManagerService);

  return function (instance) {
    eventManager.onCustomEvent().subscribe(arg => instance.prototype['onCustomEvent'](arg));
  };
}
有了这个decorator,我可以在本例的onCustomEvent中将定义的函数调用到我的组件中。所需要的只是

这位装饰师 组件将实现的接口 app模块中喷油器的静态参考:

export class AppModule {
  static injector: Injector;
  constructor(injector: Injector) {
    AppModule.injector = injector;
  }
}

这个用例是什么?@AmitChigadani我正在实现一个事件管理器,它的工作方式类似于生命周期挂钩。查看我的编辑。@trichetriche您尝试过使用ComponentRef吗?@VaibhavKumarGoyal来自哪里?我确实希望使用组件引用,但ComponentRef不是您可以在服务中注入以获取所有组件引用的东西……它确实在工作,但它不会返回所有组件—有些组件甚至还不存在,但它会返回它们。有没有办法获取所有组件,或者只创建组件?我有大约100个组件,如果我想存储所有组件,这意味着我必须写100次相同的东西。。。我先考虑过这个解决方案,但是成本太高了,每次创建新组件时都要写这个,这不实用。我对装饰师不太熟悉。但我认为它可以帮助你避免多次重复代码。我确实在研究decorator解决方案:我将装饰函数,以便在提交事件时运行它们。但现在这是一条死胡同,就像其他解决方案一样。这就是为什么我在那里要求一个解决方案。