【发布时间】:2021-07-13 18:21:52
【问题描述】:
我的 Angular 组件中有一个 ObservableInput,还有一个主题按钮,按下该按钮后,我获取输入值,并调用另一个 observable,然后订阅它以使用返回的数据。
但问题是,每当此输入发生变化时,它都会触发 (onClick) 函数,该函数不会在不点击的情况下触发,因为它会自动订阅输入,因为我使用的是 switchMap。
我怎样才能防止这种情况发生?
class SomeComponent {
@ObservableInput @Input() name$: Observable<string>;
private clickSubject = new Subject<Event>();
constructor(private _someService: Service) {
this.clickSubject.pipe(
switchMap(() => this.name$),
switchMap((name) => this._someService.getUserByName(name))
).subscribe((data: UserData) => {
// Work around with data here.
});
}
onUserClick(): void {
clickSubject.next();
}
}
我读到我可以使用 RxJS 中的“merge()”,但我似乎找不到让它工作的方法。 mergeMap 也返回一个 Observable 但订阅了不需要的 name$。
我只需要获取当前的 name$ 值而不订阅它,因此无论何时更改,它都不会触发订阅块上的任何内容。
谢谢。
【问题讨论】: