angular - Rxjs switchMap 没有调用通过它传递的函数
问题描述
我正在使用Subject
来自rxjs
. 我从组件中调用了两种方法。
- 搜索
search(terms: Observable<string>) {
return terms.pipe(
debounceTime(400),
distinctUntilChanged(),
switchMap(term => {
this.numberOfItems = API_INFO.PER_PAGE_ITEMS;
return this.getPosts(term)
})
);
}
- 装载更多
loadmore(terms: Observable<string>, pageNumber) {
this.numberOfItems = API_INFO.PER_PAGE_ITEMS * pageNumber;
return terms.pipe(
debounceTime(0),
switchMap((term: string) => this.getPosts(term))
)
}
组件订阅代码
this.homeService.search(this.searchLocation$)
.subscribe((data)=>this.handleSuccess(data),(err)=>this.handleError(err))
问题是search
工作正常,loadmore
虽然他们都有相同的代码
PS:我对两个 observable 使用相同的订阅模型
解决方案
您必须使用合并从两个可观察的数据中获取数据,一个来自搜索,另一个来自加载更多事件
loadmore 事件可以是滚动事件或按钮点击事件
<button #loadmore>Button</button>
...
@ViewChild('loadmore', { static: true }) button: ElementRef;
let loadmore$ = fromEvent(this.button.nativeElement, 'click');
...
merge(this.homeService.search(this.searchLocation$),
this.homeService.loadmore(this.loadmore$, pageNumber))
.pipe(
distinct()
).subscribe(
(data)=>this.handleSuccess(data),
(err)=>this.handleError(err)
)
推荐阅读
- bash - 执行从参数接收到的命令到 Bash 脚本中的函数
- git - 将超过 100MB 的文件推送到 GitHub
- azure - 连接到 Azure Signalr 时,appservice 可以充当客户端吗?
- mysql - 从 MySQL 中选择 7 行,除了最后 7、14、...、N*7 行
- asp.net - 成功验证后覆盖signin-oidc回调重定向的位置
- three.js - 如何在three.js中从视口角度获取一个点的Vector3?
- c# - UNITY 在鼠标点击旁边出现文字
- typescript - 我如何改进这个通用 Box 函数的类型?
- embedded - wolfSSL 基础层信息
- python - 如何将求和的行变成列