Angular 2 - 确定注射器实例化服务的指令?

时间:2016-08-04 11:29:11

标签: angular

在Angular 2中,只要遇到@Directive的providers: [MyService]属性,注入器就会创建一个新的服务实例。指令的子组件不必将MyService传递给其提供者,如果发现向组件树返回,则注入器将使用该类型的第一个服务。无论如何,这是我对它的理解。

调试组件时,通过查看服务属性来确定服务的创建位置可能很困难(可能不可能?)。有没有办法在运行时找到它?也许在调试时我们可以在Service构造函数()中设置一个属性?

例如,您可以调试服务,它将具有属性createAt:string,其中包含" ComponentName&#34 ;;这就是我想要找到的东西。

1 个答案:

答案 0 :(得分: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-data-in-browsers-console / 32749562#32749562。 您应该能够找到组件的提供者,然后比较您获得的实例是否与您期望与否的提供者相同。