Angular2 这是使用 Observables 的正确方法吗?

Angular2 is this the right way to use Observables?

'subscribe' 和 'unsubscribe' 如何与 Angular2 中的 Observable 一起工作?

我的架构如下:

  1. 包含 CRUD 操作和 returns 的 CRUD(Repo) 服务 可观察
  2. 与 CRUD 对话的中间服务。该服务被注入到组件中并包含私有的 BehaviorSubjects。我公开了潜在的价值

    get selectedClient(): Observable<Client> {
        return this._selectedClient.asObservable();
    }
    
    get clients(): Observable<Client[]> {
        return this._clients.asObservable();
    }
    
  3. 在组件级别,我通过订阅前面提到的 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.

检索参数