我应该在哪里选择在Angular中订阅HttpClient?

时间:2019-01-02 18:53:30

标签: angular

我试图创建一个简单的Angular应用程序。我需要后端具有数据库的基本CRUD函数。对于http操作,我正在使用服务。

有一些功能,例如

 ...
 getPublicEvent(): Observable<any> {
    return this.http
      .get<Event[]>(this.publicEventUrl)
  }

 setEvent(Event) {
   return this.http.post(this.editEventUrl, Event)
  }
 ...

另一个组件“ create”订阅该服务并执行HTTP请求。

我看过一些教程,其中订阅直接在服务文件中完成。现在有什么好处?两者都可以。
错误处理和错误输出呢?

如何进行良好的结构设计?

2 个答案:

答案 0 :(得分:1)

如果您在组件级别订阅,则可以为每个组件以不同的方式链接HTTP请求。我假设组件将需要不同的数据,有时您需要从属数据才能加载到链中或异步组(forkjoins)中。

何时将需要使用API​​而不是服务的组件也应引起关注。

因此,我建议您在组件级别进行订阅。

答案 1 :(得分:1)

在服务和组件级别上的订阅都是有效的,但是一个比另一个更灵活。

如果您选择在服务级别进行订阅,则会失去选择组件级别功能的灵活性。但是,有时您可能想要这样做以锁定服务方法的功能,这通常很少见。人们大多数时候会选择在组件级别进行订阅。它使服务方法更具扩展性。

就错误处理而言,在订阅时会在初始回调函数(如果适用)之后声明此错误。 示例:

getPublicEvent().subscribe(
  () => console.log('do something...'), // initial callback (optional)
  error => console.log(error),          // error callback (optional)
  () => console.log('complete')         // subscribe complete callback (optional)
)

您可以在RxJS文档here

中了解有关Observable和订阅的更多信息。