【发布时间】:2017-02-01 16:14:19
【问题描述】:
“订阅”和“取消订阅”如何与 Angular2 中的 Observable 一起使用?
我的架构如下:
- CRUD(Repo) 服务包含 CRUD 操作并返回一个 可观察
-
与 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 是应用程序的状态对象。
但是,它在每个组件中都带来了所有这些“订阅/取消订阅”,据我了解,如果您不取消订阅,您将向订阅数组添加另一个订阅,这意味着任何更改现在都会触发订阅下的代码两次。
应用程序是否应该有“selectedItem”的概念?
【问题讨论】:
标签: angular rxjs angular2-routing observable