1

将 Angular 从 v8 升级到 v9。该项目使用其“独特”的方式来定义事物(而不是组合),例如与服务一起扩展基类的类

例如:

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 = [

迁移到 Angular 9 后,获得:

在此处输入图像描述

为其他类似的类获得相同类型的错误。

问题的根源似乎与尝试将服务注入使用继承的 clesses 有关。不幸的是,在这个级别 - 如果没有大的重构,就不可能把它扔掉。

有什么方法可以处理错误?

4

2 回答 2

1

继承链中有抽象基类吗?奇怪的是,抽象基础组件需要有一个@Directive()装饰器。无论如何,至少我的自动“升级”了。

@Directive()
export abstract class FormStrategyDruidBase  {
  constructor(/* params here */) {
  }
}
于 2020-02-09T10:22:32.070 回答
1

简短的回答是:

  • 所有作为服务或用作服务的类都应使用@Injectable()装饰器进行注释。

详细答案在这里:https ://github.com/angular/angular/issues/19417#issuecomment-332851205 。

似乎要求在 Angular 8 中是可选的,但在 Angular 9 中成为强制性要求。

于 2020-02-09T10:34:31.993 回答