我们想测量以下Angular事件,我们知道如何执行此操作:
但我们想记录额外的信息:
我们如何获得这些额外信息?
答案 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了解工作示例
我没有时间深入研究这个问题,如果我找到时间,我明天会试试
我认为您可以通过路由器事件获得所需的所有信息。它们允许访问已解析的路由,该路由包含所有配置,包括应插入路由器插座的组件。