异步管道订阅 Observable 后触发操作
Fire Action After async pipe has subscribed to an Observable
我有以下组件:
data$: Observable < MyApolloQueryResult > ;
constructor(private myService: MyService) {}
ngOnInit() {
this.data$ = this.myService.getData();
}
<div *ngIf="data$ | async as data; else loading">
...
</div>
如您所见,我只订阅了组件模板中的 Observable
。问题是,我如何触发一个动作(比如在上面的 myService
中设置一个变量)只有 在 上面的 async
管道订阅了 Observable
,换句话说,在确定这个 Observable
不再冷之后。
为了有副作用,使用do
operator。
this.data$ = this.myService.getData().do(value => {
// side effect
})
传递给 do
运算符的函数将在每次 observable 发射时被调用,对于每个订阅——所以要小心只订阅一次,否则他的效果会发生多次。
然而,这通常意味着您没有完全使用 RxJS 的强大功能。不要产生副作用,而是尝试使用 some of the operators 以您喜欢的方式操纵流。
我有以下组件:
data$: Observable < MyApolloQueryResult > ;
constructor(private myService: MyService) {}
ngOnInit() {
this.data$ = this.myService.getData();
}
<div *ngIf="data$ | async as data; else loading">
...
</div>
如您所见,我只订阅了组件模板中的 Observable
。问题是,我如何触发一个动作(比如在上面的 myService
中设置一个变量)只有 在 上面的 async
管道订阅了 Observable
,换句话说,在确定这个 Observable
不再冷之后。
为了有副作用,使用do
operator。
this.data$ = this.myService.getData().do(value => {
// side effect
})
传递给 do
运算符的函数将在每次 observable 发射时被调用,对于每个订阅——所以要小心只订阅一次,否则他的效果会发生多次。
然而,这通常意味着您没有完全使用 RxJS 的强大功能。不要产生副作用,而是尝试使用 some of the operators 以您喜欢的方式操纵流。