【发布时间】: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