Angular поведение конструктора с расширенным абстрактным классом с DI в нем - PullRequest
0 голосов
/ 14 июля 2020

Каждый раз, когда я использую абстрактный класс для Angular компонентов для расширения, он ведет себя так, как ожидалось, пока я не объявлю конструктор с помощью супервызова.

Ради объяснения я просто буду использовать пустой абстрактный класс, который вводит Angular маршрутизатор.

abstract class AbstractClass {
  constructor(private router: Router) {}
}


@Component({
...
})
export class AppComponent extends AbstractClass {}

В приведенном выше примере все работает нормально, ни один машинописный текст не жалуется, но если я объявлю конструктор в AppComponent, он потребует супер-вызов, например это, чтобы заставить его работать:

@Component({
...
})
export class AppComponent extends Class {
  constructor(router: Router) {
    super(router);
  }
}

И это работает, с другой стороны, если я изменяю AbstractClass и устанавливаю определение private router: Router как необязательное свойство, например: private router?: Router, оно работает вызов super super() без каких-либо параметров, но он не будет внедрять зависимость, ПОЧЕМУ !!.

Мои вопросы:

Как лучше всего это сделать? какова цель constructor(router: Router), просто объявляет ли он тип? Такое ощущение, что мне не хватает теории, которая мешает мне понять, как инъекция зависимостей обрабатывается под капотом с абстрактными классами машинописного текста, что делает router publi c лучшим способом сделать эту зависимость видимой для базового класса ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...