【问题标题】:Angular 2 - determine the Directive where a Service was instantiated by the Injector?Angular 2 - 确定注入器实例化服务的指令?
【发布时间】:2016-08-04 11:29:10
【问题描述】:

在 Angular 2 中,每当遇到 @Directive 的 providers: [MyService] 属性时,注入器都会创建一个新的服务实例。指令的子组件不必将 MyService 传递给它们的提供者,如果找到返回组件树,注入器将使用该类型的第一个服务。反正我是这么理解的。

在调试组件时,通过查看服务属性来确定服务是在什么时候创建的可能很困难(也许不可能?)。有什么方法可以在运行时找到它吗?也许我们可以在 Service constructor() 中设置一个属性,以便在调试时读取?

例如,您可以调试服务,它会具有属性 createAt:string,该属性将具有“ComponentName”;这就是我想要找出的。

【问题讨论】:

  • 我没试过,但是使用http://stackoverflow.com/questions/32052432/how-to-access-the-angular-2-components-data-in-the-browsers-console/32749562#32749562 (ng.probe) 你应该能够找到组件的提供者,然后比较你得到的实例是否与来自您期望与否的提供商。
  • 谢谢,这是我会研究的。我正在尝试找到一种在编译时获取该信息并将其设置在组件上的方法,以便在调试时它是一个易于查看的属性
  • 您可以在提供服务时为服务设置一个值(如果您控制源)providers: [{provide: 'providerid', useValue: 1}, MyService]。如果MyService 有一个类似constructor(@Inject('providerid') public providerid) {} 的构造函数,那么服务就会注入这个id。
  • 提供的语法不起作用。
  • 什么部分?什么 Angular2 版本?

标签: angular


【解决方案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-the-browsers-console/32749562#32749562。 您应该能够找到组件的提供者,然后比较您获得的实例是否与您期望的提供者提供的实例相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 2015-10-28
    • 2017-08-24
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多