获取模块类名和组件类名

时间:2018-03-08 16:23:39

标签: angular angular5

我们想测量以下Angular事件,我们知道如何执行此操作:

  • ngAfterViewInit组件和指令(通过生命周期钩子)
  • 路由导航时间(通过路由器事件)
  • http通过common / http(通过拦截器)
  • 的http客户端调用

但我们想记录额外的信息:

  • 与路径关联的模块类名称和路径组件类名称
  • 注册给定组件的模块类名称
  • 执行http调用和关联模块的服务或组件

我们如何获得这些额外信息?

1 个答案:

答案 0 :(得分:1)

查找函数的调用者

您可以利用调用堆栈来查找进行调用的服务或组件。看到这个问题

How do you find out the caller function in JavaScript?

查找组件的模块

要获取给定组件的声明模块,您可以使用ComponentFactoryResolver

解析组件时,会返回ComponentFactory。但是在查看源代码时,我们可以看到ComponentFactory是一个抽象类。实际上,真正的类是ComponentFactoryBoundToModule,它知道它的模块。

它知道,但它是私人的。如果它只是用于debuging或logging,我认为你可以忽略TypeScript并获得这个私有属性。在运行时,隐私会丢失,因此您可以执行类似

的操作
constructor(private resolver: ComponentFactoryResolver) {
  const factory = resolver.resolveComponentFactory(HelloComponent);
  console.log('the factory:', factory);

  // Access the private ngModule property.
  const ngModuleRef: NgModuleRef<any> = (factory as any).ngModule;
  console.log('the module name:', ngModuleRef.instance.constructor.name)
}

请参阅this StackBlitz了解工作示例

查找路径的组件

我没有时间深入研究这个问题,如果我找到时间,我明天会试试

我认为您可以通过路由器事件获得所需的所有信息。它们允许访问已解析的路由,该路由包含所有配置,包括应插入路由器插座的组件。