2016-08-04 46 views
3

在Angular 2中,只要碰到@Directive的providers: [MyService]属性,注入器就会创建一个服务的新实例。该指令的子组件不必将MyService传递给它们的提供者,并且如果找到组件树,则注入器将使用该类型的第一个服务。无论如何,这是我的理解。Angular 2 - 确定服务由喷油器实例化的指令?

在调试组件时,通过查看服务属性来确定服务创建的时间点可能很困难(也许不可能?)。有什么方法可以在运行时找到它吗?也许我们可以在Service构造函数()中设置一个属性,我们可以在调试时读取它?例如,你可以调试服务,它会有属性createAt:字符串,它会有“组件名称”;这就是我想要发现的。

+0

我还没有尝试过,但使用'http://stackoverflow.com/questions/32052432/how-to-access-the-angular-2-components-data-in-the-browsers-console/32749562# 32749562'('ng.probe'),你应该能够找到组件的提供者,然后比较你得到的实例是否与你期望或​​不期望的提供者相同。 –

+0

Thinks,这是我会研究的东西。我试图找到一种方法在编译时获取该信息并将其设置在组件上,以便在调试时它是一个易于查看的属性 – Ryan

+0

您可以在当时为您的服务设置一个值(如果您控制源的话)你提供它'提供者:[{提供:'提供者',useValue:1},MyService]'。如果'MyService'具有像'constructor(@Inject('providerid')public providerid){}'这样的构造函数,那么服务将会注入这个id。 –

回答

1

您可以将值设置为您服务(如果你控制源)的时候你提供给它

providers: [{provide: 'providerid', useValue: 1}, MyService] 

如果MyService有一个像

constructor(@Inject('providerid') public providerid) {} 

一个构造函数,然后该服务将得到这个ID注入。

为了进行调试,ng.probe也可能适用于此目的。请参阅How to access the *angular 2* components' data in the browser's console? nts-browser-console/console/32749562#32749562。 您应该能够找到组件的提供者,然后比较您获得的实例是否与您期望的提供者相同。

+0

完美,谢谢 – Ryan