【问题标题】:Inject service after constructor finished构造函数完成后注入服务
【发布时间】:2019-09-01 12:54:56
【问题描述】:

我编写了一个服务来访问 spotify api。 在构造函数中,此服务应获取访问令牌。 因此我在 Observable 上调用 subscribe 方法。

问题在于:

服务被注入到我的主要组件中。 在那里我调用此服务的方法来接收来自 spotify api 的数据。 我认为问题是在第一次对 api 的请求尝试使用它之前尚未收到访问令牌。

我怎样才能做到这一点,只有在构造函数完成获取访问令牌后才注入服务?

【问题讨论】:

  • 你不能那样做。让您的服务将访问令牌视为可观察的,并将您的请求链接到它。
  • 如果延迟页面加载直到访问令牌可用也是一种选择(即,如果令牌对您的应用程序绝对至关重要),您也可以考虑使用route guard

标签: angular typescript service httpclient


【解决方案1】:

如果您想获取服务的实例但不通过构造函数注入,您可能需要使用 injector.get 方法来获取实例。类似的东西 -

const notificationService = this.injector.get(NotificationService);

更多细节/示例请参考 -

https://medium.com/@aleixsuau/error-handling-angular-859d529fa53a, Inject a service manually, https://angular.io/api/core/Injector#get

【讨论】:

  • 这不会解决他们的问题,因为即使服务最初是在 root 中提供的,API 请求和依赖解析之间仍然存在竞争条件。
猜你喜欢
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多