Angular2 这是使用 Observables 的正确方法吗?
Angular2 is this the right way to use Observables?
'subscribe' 和 'unsubscribe' 如何与 Angular2 中的 Observable 一起工作?
我的架构如下:
- 包含 CRUD 操作和 returns 的 CRUD(Repo) 服务
可观察
与 CRUD 对话的中间服务。该服务被注入到组件中并包含私有的 BehaviorSubjects。我公开了潜在的价值
get selectedClient(): Observable<Client> {
return this._selectedClient.asObservable();
}
get clients(): Observable<Client[]> {
return this._clients.asObservable();
}
在组件级别,我通过订阅前面提到的 getter 来访问数据:
deleteClient() {
this.selectedClient.subscribe(actualClient => {
this.clientStore.deleteClient(actualClient).subscribe(response => {
if (response) {
this.router.navigate(['/clients']);
}
});
}).unsubscribe();
}
updateClient() {
this.clientUpdateForm.submitClientForm().subscribe(client => {
if (client) {
this.growlService.showInfoMessage("Client updated", client.firstName + " " + client.lastName);
}
}).unsubscribe();
}
this.selectedClient.subscribe(client => {
this.clientForm = this.clientUpdateForm.clientForm;
}).unsubscribe();
首先我想问一下,这个设计有什么问题吗?
其次,什么时候需要取消订阅,什么时候不需要?
想法是 selectedClient
是应用程序的状态对象。
然而,它在每个组件中带来了所有这些 'subscribe/unsubscribe',根据我的理解,如果您不取消订阅,您将向订阅数组添加另一个订阅,这意味着任何更改现在都会触发下面的代码订阅两次。
应用程序是否应该具有 'selectedItem' 的概念?
您的设计看起来很扎实。你可能想考虑 ngrx/store
,他们也使用 Observables / BehaviorSubjects
,但另外实现了 Redux 模式,这提高了整体代码的可读性和设计。
通常您不需要取消订阅 Observables,例如HTTP 可观察对象在返回值(或错误)后自行完成。
Observable 未完成时需要取消订阅,例如 Observable.timer
,或者如果从 routerService
.
检索参数
'subscribe' 和 'unsubscribe' 如何与 Angular2 中的 Observable 一起工作?
我的架构如下:
- 包含 CRUD 操作和 returns 的 CRUD(Repo) 服务 可观察
与 CRUD 对话的中间服务。该服务被注入到组件中并包含私有的 BehaviorSubjects。我公开了潜在的价值
get selectedClient(): Observable<Client> { return this._selectedClient.asObservable(); } get clients(): Observable<Client[]> { return this._clients.asObservable(); }
在组件级别,我通过订阅前面提到的 getter 来访问数据:
deleteClient() { this.selectedClient.subscribe(actualClient => { this.clientStore.deleteClient(actualClient).subscribe(response => { if (response) { this.router.navigate(['/clients']); } }); }).unsubscribe(); } updateClient() { this.clientUpdateForm.submitClientForm().subscribe(client => { if (client) { this.growlService.showInfoMessage("Client updated", client.firstName + " " + client.lastName); } }).unsubscribe(); } this.selectedClient.subscribe(client => { this.clientForm = this.clientUpdateForm.clientForm; }).unsubscribe();
首先我想问一下,这个设计有什么问题吗? 其次,什么时候需要取消订阅,什么时候不需要?
想法是 selectedClient
是应用程序的状态对象。
然而,它在每个组件中带来了所有这些 'subscribe/unsubscribe',根据我的理解,如果您不取消订阅,您将向订阅数组添加另一个订阅,这意味着任何更改现在都会触发下面的代码订阅两次。
应用程序是否应该具有 'selectedItem' 的概念?
您的设计看起来很扎实。你可能想考虑 ngrx/store
,他们也使用 Observables / BehaviorSubjects
,但另外实现了 Redux 模式,这提高了整体代码的可读性和设计。
通常您不需要取消订阅 Observables,例如HTTP 可观察对象在返回值(或错误)后自行完成。
Observable 未完成时需要取消订阅,例如 Observable.timer
,或者如果从 routerService
.