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
之间没有区别。