【发布时间】:2019-01-03 10:14:58
【问题描述】:
我目前正在使用 Angular 7。
我正在尝试实现一个基本的 http 服务,这样我就可以处理每个错误并显示加载的 gif 完全一样。所以我有一个基础服务,我的所有服务都扩展了;一旦发出 http 请求,我就会更新页面正在加载的行为主题。我在app.component.ts 中订阅了这个BehaviorSubject,但它从未在这里触发。在网上看,每个人都建议我的基础 http 服务不是单例,而我的 app.component.ts 正在订阅基础服务的不同实例。
我在 SlackBlitz here 上创建了一个小例子。
当您单击“更改 showLoading”按钮时,我的订阅似乎在 BaseServiceService 类中工作正常,但从未在 app.component 中触发?
我做错了什么?
【问题讨论】:
-
您想要实现的目标很容易使用 http 拦截器完成。
-
我建议您不要从基础服务继承,而是在其他服务中使用/注入基础服务。这样,您就可以在所有其他服务中访问您的基础服务的功能,并且仍然只使用一个您可以在组件中订阅的基础服务实例。
-
@Davy 很好的建议,这是我最后采取的路线。虽然现在我有 2 个 http 拦截器(另一个是 jwt 令牌拦截器)。有 2 个 http 拦截器是不好的做法吗?
-
不。一点也不。让一个拦截器执行多项不相关的事情是不好的做法。