Angular/RXJS-如何在切换映射后执行逻辑
在我的一个组件中,我有一个更新本地可观察(Angular/RXJS-如何在切换映射后执行逻辑,angular,rxjs,rxjs-observables,Angular,Rxjs,Rxjs Observables,在我的一个组件中,我有一个更新本地可观察(album$)的函数,然后在我的html中使用该函数来显示数据(*ngIf=“album$| async as album”)。这个很好用 getData() { this.album$ = this._activatedRoute.params.pipe( tap(params => { // Update variables }), switchMap(params => {
album$
)的函数,然后在我的html中使用该函数来显示数据(*ngIf=“album$| async as album”
)。这个很好用
getData() {
this.album$ = this._activatedRoute.params.pipe(
tap(params => {
// Update variables
}),
switchMap(params => {
return this.service.getData(params.id, params.id2);
})
)
}
然而,一个新的需求意味着我需要更新我的一个服务中的行为主体。上述功能似乎是一举两得的好地方
我想执行patchValue
和this.service.obs$.next
一旦上述函数返回数据
我确实在一个单独的组件中实现了这一功能,但由于我没有在上面的组件中使用订阅,我该如何添加this.service.album$.next(数据)代码>到我的上述功能
//另一个函数的示例,它具有我非常想要的功能,但基于订阅
getData(){
this._subscription = this._activatedRoute.params.pipe(
tap(params => {
// update variables
}),
switchMap(params => {
return this.service.getData(params.id1, params.id2);
})
).subscribe(data => {
if (data) {
this.service.obs$.next(data);
}
});
}
您可以通过管道将点击
或映射
到内部可观察对象。试试下面的方法
getData(){
this.album$=this.\u activatedRoute.params.pipe(
轻触(参数=>{
//更新变量
}),
开关映射(参数=>{
返回此.service.getData(params.id,params.id2).pipe(
点击(数据=>{
this.service.obs$.next(数据);
//面片值
//做点别的
})
);
})
);
}
您可以使用tap()
执行副作用显示正在从tap
切换到map
不取决于副作用?;)我正要接受上面的答案,但现在我对上面的问题感到好奇:)@Haven:这是一个正确的观点。如果不修改值,则使用map
基本上没有任何用处。我已将答案调整为使用点击
。当您说该值未被修改时,是指一旦获得该值,还是从源代码更改?我想知道我是否理解正确的意思是,map
如果来自可观察对象的数据被修改,并且修改后的值被返回,那么它是有用的。但是我们没有以任何方式修改来自内部可观测数据,这里的tap
和map
之间没有区别。