У меня есть базовый класс компонентов:
export abstract class BaseListComponent<GenObject extends BaseObject>
{
constructor(
@Inject(ActivatedRoute) protected readonly route: ActivatedRoute,
@Inject(SpudService) protected readonly spud_service: SpudService,
) {
console.log(this.route, this.spud_service);
}
...
}
Это используется рядом классов, которые наследуются от этого, например:
@Component({
selector: 'album_list',
templateUrl: './base-list.component.html',
})
export class AlbumListComponent extends BaseListComponent<AlbumObject>
{
...
}
Когда я запускаю этот код с помощью ng serve
и тестирую, все работает отлично. Если я соберу код с помощью ng build
и скопирую каталог dist на сервер Apache, конструктор будет вызван без двух обязательных аргументов. Вызов console.log()
печатает undefined
дважды. Затем это приводит к ожидаемым фатальным ошибкам, когда мой код пытается использовать эти службы, которые не были предоставлены.
Я также попытался создать простой тестовый пример с помощью plunker, он отлично работает.
Если в AlbumListComponent
я определил конструктор со всеми необходимыми инжекторами, то он тоже отлично работает.
constructor(
@Inject(ActivatedRoute) route: ActivatedRoute,
@Inject(SpudService) spud_service: SpudService,
) {
super(route, spud_service);
console.log(this.route, this.spud_service);
}
Однако я так понимаю, что это не должно требоваться. Следует использовать класс конструктора и аргументы из родительского класса, поскольку я не переопределил его в производном классе.
В Chrome, если я устанавливаю точку останова в console.log в родительском классе и просматриваю трассировку стека, я вижу вызов функции, в котором параметры действительно не предоставляются:
function Wrapper_AlbumListComponent() {
var self = this;
self._changed = false;
self._changes = {};
self.context = new jit_AlbumListComponent0();
self._expr_0 = jit_CD_INIT_VALUE1;
self._expr_1 = jit_CD_INIT_VALUE1;
}
Есть идеи, где я ошибаюсь?
Полный код доступен.