我有一个基本组件类:
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服务器,则在没有2个必需参数的情况下调用构造函数。对console.log()
的调用会两次打印undefined
。当我的代码尝试使用这些未提供的服务时,这会导致预期的致命错误。
我还尝试使用plunker创建一个simple test案例,它完美无缺。
如果在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;
}
我出错的任何想法?
完整代码为available。