Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 获取模块类名称和组件类名称_Angular_Angular5 - Fatal编程技术网

Angular 获取模块类名称和组件类名称

Angular 获取模块类名称和组件类名称,angular,angular5,Angular,Angular5,我们想测量以下角度事件,我们知道如何测量: ngAfterViewInit组件和指令(通过生命周期挂钩) 路由导航计时(通过路由器事件) 通过公共/http的http客户端进行http调用(通过拦截器) 但我们希望记录额外信息: 与路由关联的模块类名和路由组件类名 在其中注册给定组件的模块类名 执行http调用和关联模块的服务或组件 我们如何获得这些额外信息?找到函数的调用者 您可以利用调用堆栈查找进行调用的服务或组件。看到这个问题了吗 查找组件的模块 要获取给定组件的声明模块,可以使

我们想测量以下角度事件,我们知道如何测量:

  • ngAfterViewInit组件和指令(通过生命周期挂钩)
  • 路由导航计时(通过路由器事件)
  • 通过公共/http的http客户端进行http调用(通过拦截器)
但我们希望记录额外信息:

  • 与路由关联的模块类名和路由组件类名
  • 在其中注册给定组件的模块类名
  • 执行http调用和关联模块的服务或组件
我们如何获得这些额外信息?

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

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

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

它知道,但它是私人的。如果只是为了调试或记录,我认为您可以忽略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)
}
构造函数(专用解析器:ComponentFactoryResolver){
const factory=resolver.resolveComponentFactory(HelloComponent);
console.log('工厂:',工厂);
//访问私有模块属性。
const ngModuleRef:ngModuleRef作为工作示例

查找路由的组件 我没有时间深入研究这个问题,如果有时间的话,我明天就试试

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

查找函数的调用方 您可以利用调用堆栈查找进行调用的服务或组件。请参阅此问题

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

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

它是知道的,但它是私有的。如果它只是为了调试或记录,我想你可以忽略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)
}
构造函数(专用解析器:ComponentFactoryResolver){
const factory=resolver.resolveComponentFactory(HelloComponent);
console.log('工厂:',工厂);
//访问私有模块属性。
const ngModuleRef:ngModuleRef作为工作示例

查找路由的组件 我没有时间深入研究这个问题,如果有时间的话,我明天就试试

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