在Angular 2中,只要碰到@Directive的providers: [MyService]
属性,注入器就会创建一个服务的新实例。该指令的子组件不必将MyService传递给它们的提供者,并且如果找到组件树,则注入器将使用该类型的第一个服务。无论如何,这是我的理解。Angular 2 - 确定服务由喷油器实例化的指令?
在调试组件时,通过查看服务属性来确定服务创建的时间点可能很困难(也许不可能?)。有什么方法可以在运行时找到它吗?也许我们可以在Service构造函数()中设置一个属性,我们可以在调试时读取它?例如,你可以调试服务,它会有属性createAt:字符串,它会有“组件名称”;这就是我想要发现的。
我还没有尝试过,但使用'http://stackoverflow.com/questions/32052432/how-to-access-the-angular-2-components-data-in-the-browsers-console/32749562# 32749562'('ng.probe'),你应该能够找到组件的提供者,然后比较你得到的实例是否与你期望或不期望的提供者相同。 –
Thinks,这是我会研究的东西。我试图找到一种方法在编译时获取该信息并将其设置在组件上,以便在调试时它是一个易于查看的属性 – Ryan
您可以在当时为您的服务设置一个值(如果您控制源的话)你提供它'提供者:[{提供:'提供者',useValue:1},MyService]'。如果'MyService'具有像'constructor(@Inject('providerid')public providerid){}'这样的构造函数,那么服务将会注入这个id。 –