Angular2 服务依赖注入

Angular2 services dependency injection

调用 AuthService => login 时,记录器会在浏览器控制台中正确附加 Foo! 但 当 ErroHandler => handleError 被调用时,记录器的实例总是未定义的(除了在 class 的构造函数中)。我希望看到 Bar! 也被添加到浏览器控制台中。 谁能给我解释一下这种行为?

参考:https://embed.plnkr.co/cKwT5R39IL1TTJBRvZyY/

问题与依赖注入无关。如果出现 DI 问题,这会导致编译器出现错误消息。

发生这种情况是因为 errorHandler.handleError 方法在此处作为回调传递:

.catch(this.errorHandler.handleError);

并且未正确绑定到上下文。

这是一个典型的错误。除非知道对象方法绑定在对象构造上(这对于设计上应该用作回调的方法来说是一个好习惯),否则它应该总是像

.catch(err => this.errorHandler.handleError(err));