涉及其他可观察的可观测量

时间:2017-11-15 15:02:30

标签: angular rxjs observable

我有一个问题,我的一个observable依赖于另一个observable,但是当父observable更新时,孩子似乎没有更新。

ClientService(父级)

@Injectable()
export class ClientService {

  private client =  new BehaviorSubject("");
  clientStream$ = this.client.asObservable();

  }
}

CommentService(孩子)

@Injectable()
export class CommentsProvider {
  private client$: Observable<any>;
  private comments = new BehaviorSubject([]);
  comments$: Observable<any[]>

  constructor(private clientService: ClientService) {
    this.initializeComments()
  }

  initializeComments() {
    this.client$ = this.clientService.clientStream$
    this.comments$ = this.comments.asObservable()

    this.client$.subscribe( client => {
      for ( let comment of client.comments ) {
        this.addComment(comment)
      }
    })
  }

  addComment(comment) {
    let commentArray = _.cloneDeep(this.comments.getValue());
    commentArray.push(comment)
    this.comments.next(commentArray)
  }

  getComments() : Observable<any[]> {
    return this.comments$
  }
}

在我的视图组件中,我打电话给:

`this.comments$ = this.commentService.getComments();` 

并使用以下方式显示结果:

*ngIf="this.comments$ | async as comments ..."

如果我拨打addComment(),则会更新数组,但是,当我向client.comments添加评论时,数组更新。是否有办法通知订阅者更改为client.comments

1 个答案:

答案 0 :(得分:0)

我可能遗漏了一些东西,但ClientService中没有任何内容可以添加到BehaviorSubject中。

@Injectable()
export class ClientService {

  private client =  new BehaviorSubject("");
  clientStream$ = this.client.asObservable();

  }
}

变量client是私有的,因此无法在课外访问 clientStream$asObservable(),因此您无法.next(newVale)为其赋予新值(至少我认为这是asObservable的重点)。
您是否只粘贴了部分ClientService? - 有两个关闭的咖喱,但只有一个开放的咖喱。

可能将此方法添加到ClientService,

addClient(newClient) {
  client.next(newClient);
}