情况:
我有一个基类Base
。 Main
延伸Base
。 Main
通过Base
将服务传递到super()
。 Base
然后调用该服务上的方法。
问题:
undefined
中的服务为Base
。除非我在基类之前console.log(_service)
。我怀疑通过AsyncRoute与延迟加载相关的竞争条件,或者可能是它的实例化问题......无论哪种方式,我都不确定如何开始纠正它。
Main.ts:
export class Main extends Base {
constructor(private _service:SomeService) {
super(this._service);
}
}
Base.ts:
@Injectable()
export class Base {
constructor(_service) {
_service.doSomething(true);
}
}
代码在_service.doSomething(true)
出现错误:
EXCEPTION:Main!
实例化时出错ORIGINAL EXCEPTION:TypeError:无法读取属性' doSomething'未定义的
但是,如果我试图追踪为什么_service未定义执行以下操作 - 神奇地它可以工作???
Base.ts:
@Injectable()
export class Base {
constructor(_service) {
console.log("_service?", _service); // if this is here...
_service.doSomething(true); // ...then the error no longer occurs here
}
}
答案 0 :(得分:1)
您可以使用服务接口来解决此问题,如下所示。
interface IService{
doSomething();
}
现在修改基类,如下所示。
export class Base {
constructor(_service: IService) {
_service.doSomething(true);
}
}
注意:SomeService
应该实现IService
希望这能解决您的问题。
答案 1 :(得分:0)
问题是我使用的是静态服务,所以我应该做SomeService.doSomething()
而不是像_service:SomeService
那样尝试实例化。
这就是console.log
“修复”它的原因 - 它在console.log()
语句中被实例化,然后及时存在以便实际使用它。