我试图创建一个简单的Angular应用程序。我需要后端具有数据库的基本CRUD函数。对于http操作,我正在使用服务。
有一些功能,例如
...
getPublicEvent(): Observable<any> {
return this.http
.get<Event[]>(this.publicEventUrl)
}
setEvent(Event) {
return this.http.post(this.editEventUrl, Event)
}
...
另一个组件“ create”订阅该服务并执行HTTP请求。
我看过一些教程,其中订阅直接在服务文件中完成。现在有什么好处?两者都可以。
错误处理和错误输出呢?
如何进行良好的结构设计?
答案 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和订阅的更多信息。