angular - Angular / RXJS - 如何在 switchMap 之后执行逻辑
问题描述
在我的一个组件中,我有一个函数可以更新本地 observable ( 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);
})
)
}
但是,一个新要求意味着我需要更新我在其中一项服务中拥有的 BehaviorSubject。上面的功能似乎是一块石头杀死两只鸟的好地方。
我想执行一个patchValue
andthis.service.obs$.next
一旦上面的函数返回它的数据。
我确实在我拥有的单独组件中实现了此功能,但由于我没有在上述组件中使用订阅,我将如何超越添加this.service.album$.next(data);
到我的上述功能?
// 另一个具有我非常喜欢的功能的函数示例,但它是基于订阅的。
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);
}
});
}
解决方案
您可以通过管道输入tap
或map
连接到内部可观察对象。尝试以下
getData() {
this.album$ = this._activatedRoute.params.pipe(
tap(params => {
// update variables
}),
switchMap(params => {
return this.service.getData(params.id, params.id2).pipe(
tap(data => {
this.service.obs$.next(data);
// patch value
// do something else
})
);
})
);
}
推荐阅读
- regex - regexp_substr 正在跳过所有 &X
- mysql - 使用 mysqldump 编码问题转储 MariaDB 数据库
- android - Android 12 - Material You icons
- spring - 何时使用@EnableHypermediaSupport?
- grails - Passing a Closure as a method argument in Groovy
- c# - Why is the inserted value only visible while the program is running?
- mongodb - 当存在另一个字段时,Mongodb 投影会排除我的一个字段
- javascript - 如何在数组中搜索不同的参数?
- java - 如何从网站获取号码以供 Android 应用使用
- java - javafx 中 PasswordField.getText() 的 NullPointerException 堆栈跟踪