Angular 8 到 9,无法将服务导入到使用继承的 class
Angular 8 to 9, unable to import the service into the class that use inheritance
已将 Angular 从 v8 升级到 v9。该项目使用其 "unique" 定义事物的方式(而不是组合),例如 类 扩展基础 类 以及服务 .
例如:
export class TimeSeriesFormStrategy extends FormStrategyDruidBase {
constructor(
protected dashboardService: DashboardService,
protected i18nService: I18NService,
protected filterSelectService: FilterSelectService,
protected formBuilder: FormBuilder
) {
super(DashboardWidget.TypeEnum.TimeLines, dashboardService, i18nService, filterSelectService, formBuilder);
this.basicSteps = [
迁移到Angular9后,得到:
为其他类似 类 获取相同类型的错误。
问题的根源似乎与尝试将服务注入使用继承的课程有关。不幸的是,在这个级别 - 如果不进行重大重构就不可能将其丢弃。
有什么方法可以处理这个错误吗?
继承链中是否存在抽象基class?奇怪的是,抽象基础组件需要有一个 @Directive()
装饰器。至少我的是自动 "upgraded" 这样的。
@Directive()
export abstract class FormStrategyDruidBase {
constructor(/* params here */) {
}
}
简短的回答是:
- 所有作为服务或用作服务的 类 都应使用
@Injectable()
装饰器进行注释。
详细答案在这里:https://github.com/angular/angular/issues/19417#issuecomment-332851205。
似乎要求在 Angular 8 中是可选的,但在 Angular 9 中成为强制性要求。
已将 Angular 从 v8 升级到 v9。该项目使用其 "unique" 定义事物的方式(而不是组合),例如 类 扩展基础 类 以及服务 .
例如:
export class TimeSeriesFormStrategy extends FormStrategyDruidBase {
constructor(
protected dashboardService: DashboardService,
protected i18nService: I18NService,
protected filterSelectService: FilterSelectService,
protected formBuilder: FormBuilder
) {
super(DashboardWidget.TypeEnum.TimeLines, dashboardService, i18nService, filterSelectService, formBuilder);
this.basicSteps = [
迁移到Angular9后,得到:
为其他类似 类 获取相同类型的错误。
问题的根源似乎与尝试将服务注入使用继承的课程有关。不幸的是,在这个级别 - 如果不进行重大重构就不可能将其丢弃。
有什么方法可以处理这个错误吗?
继承链中是否存在抽象基class?奇怪的是,抽象基础组件需要有一个 @Directive()
装饰器。至少我的是自动 "upgraded" 这样的。
@Directive()
export abstract class FormStrategyDruidBase {
constructor(/* params here */) {
}
}
简短的回答是:
- 所有作为服务或用作服务的 类 都应使用
@Injectable()
装饰器进行注释。
详细答案在这里:https://github.com/angular/angular/issues/19417#issuecomment-332851205。
似乎要求在 Angular 8 中是可选的,但在 Angular 9 中成为强制性要求。