在Angular 2中,只要遇到@Directive的providers: [MyService]
属性,注入器就会创建一个新的服务实例。指令的子组件不必将MyService传递给其提供者,如果发现向组件树返回,则注入器将使用该类型的第一个服务。无论如何,这是我对它的理解。
调试组件时,通过查看服务属性来确定服务的创建位置可能很困难(可能不可能?)。有没有办法在运行时找到它?也许在调试时我们可以在Service构造函数()中设置一个属性?
例如,您可以调试服务,它将具有属性createAt:string,其中包含" ComponentName&#34 ;;这就是我想要找到的东西。
答案 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。 您应该能够找到组件的提供者,然后比较您获得的实例是否与您期望与否的提供者相同。