Унаследование от абстрактного класса имеет проблему с внедрением зависимости - PullRequest
0 голосов
/ 15 мая 2018

У меня есть родительский абстрактный класс, объявленный следующим образом:

import { Localization } from 'angular-l10n';
import { SomeModel} from '../../api/models/some-model';
import { SomeService } from '../../api/services/some.service';

export abstract class BaseComponent extends Localization implements OnInit {

  someModel: SomeModel[];

  constructor(
    protected someService: SomeService
  ) {
    super();
  }

  ngOnInit() {
    this.someService
      .getSomeModel()
      .pipe(take(1))
      .subscribe(ref => (this.someModel= ref), err => this.onError(err));
}

Дочерний класс использует этого родителя следующим образом:

@Component({
  selector: 'some-child-component',
  templateUrl: './some-child.component.html',
  styleUrls: ['./some-child.component.scss'],
})
export class SomeChildComponent extends BaseComponent implements OnInit {

  constructor(
    protected someService: SomeService
  ) {
    super(someService)
  }


  ngOnInit() {
    super.ngOnInit();
  }
}

Когда я запускаю ng serve --aot --preserve-symlinks, всеработает отлично.Однако всякий раз, когда я обновляю какой-либо файл, горячая перезагрузка обновляет построенное приложение, и выдается ошибка.

Класс BaseComponent в D: /some/path/components/base-component.ts расширяется отa Injectable в другом модуле компиляции без дублирования декоратора. Добавьте в класс декоратор Injectable или Pipe, Directive или Component или NgModule.

Вот версии, которые я использую:

Angular CLI: 1.7.4
Node: 6.11.4
OS: win32 x64
Angular: 5.2.10
typescript: 2.6.2
webpack: 3.11.0

Есть идеи, как я могу заставить работать мое наследство?

1 Ответ

0 голосов
/ 15 мая 2018

Локализация - @Injectable, для этого BaseComponent (который расширяет Локализацию) требуется @Injectable декоратор.Ошибка довольно очевидна

...