我有一个问题,我的一个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
?
答案 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);
}