【问题标题】:Angular 5 Dependency Injection - is there another way besides using constructor()?Angular 5 依赖注入 - 除了使用构造函数()之外还有其他方法吗?
【发布时间】:2018-05-16 13:54:59
【问题描述】:

我在我的module.ts 文件中声明了一项服务,以具有应用程序范围的范围。访问该服务实例的方法是将其声明为组件类的构造函数的一部分,就像这样,框架会自动将其连接起来:

export class ComponentBase implements OnInit {

  constructor(private myService: MyService) { }
}

我的组件类是几个类似的组件之一,所以它们都共享一个共同的基类,这个构造函数就在基类上。我发现基构造函数不是自动需要的,因此派生类可能最终没有构造函数(并且没有依赖项)。

那么,在基类中还有另一种更简单的方法吗?

【问题讨论】:

  • 我不明白你到底想做什么。如果希望所有派生类都可以访问该服务,可以在基类构造函数中将其声明为protected
  • @ConnorsFan 不管是protected还是private,只要派生类调用super(...)构造函数失败,它就不会存在。
  • 但是如果派生类没有构造函数,就会调用基类构造函数。您谈论带有构造函数的派生类,但没有调用super(...)
  • @ConnorsFan - 显然情况并非如此。如果派生类中没有构造函数,则不会调用基类构造函数。我通过console.log 确认了这一点。我原本以为不是这样,这就是为什么我花了很长时间才找到这个错误的原因。
  • 我不知道你是如何实现它的,但它确实有效。看一下this stackblitz,其中HelloComponent 派生自BaseComponent

标签: angular typescript dependency-injection


【解决方案1】:

注入作为构造函数参数提供: - 你可以直接设置类,像这样:

constructor(private myService: MyService)
  • 或使用注射器:

    构造函数(注入器:注入器){ this.myService = injector.get(MyService); }

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2016-11-09
    • 2015-12-08
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2018-03-01
    相关资源
    最近更新 更多