使用 Angular 进行服务器端排序、分页和过滤时,如何在重置过滤器时停止进行多次调用
When doing server-side sorting, pagination and filtering with Angular, how can you stop multiple calls from being made when resetting the filters
所以假设我有一个 table,其中的数据源获取如下
const mapperFunction = ([page, dateRange]) => this.service.getListedEvents(page, dateRange);
combineLatest([this.page$, this.dateRange$])
.pipe(
this.retryHelper.loadAndRetryOperator(mapperFunction, this, httpErrorConsumer)
)
.subscribe(listedEvents => {
this.tableData = listedEvents;
});
然后我有一些功能链接到我的 html 如下
pageChange(event) {
this.page$.next(event);
}
dateChange(event) {
this.dateRange$.next(event);
this.page$.next(1);
}
如果我更改日期,我希望它将页面重置为第 1 页,但意外的结果是 API 调用被启动了两次。首先是设置 dateRange 时,其次是页面重置时
一个可能的解决方案是使用 switchmap,但它仍然会触发两次,并且在第二次发射发生时取消第一次,但这对我来说似乎不正确。
我想我也可以使用去抖动,但这真的是最好的解决方案吗?
一个可能的解决方案是将要更改的所有参数放在一个对象中。这确实有意义,因为它们都是请求的一部分。
pageChange(event) {
this.requestModel$.next({
...this.requestModel,
page: event
);
}
dateChange(event) {
this.requestModel$.next({
...this.requestModel,
dateRange: event,
page: 1
);
}
这样你可以对请求模型进行多次更改,它只会触发一次请求。
所以假设我有一个 table,其中的数据源获取如下
const mapperFunction = ([page, dateRange]) => this.service.getListedEvents(page, dateRange);
combineLatest([this.page$, this.dateRange$])
.pipe(
this.retryHelper.loadAndRetryOperator(mapperFunction, this, httpErrorConsumer)
)
.subscribe(listedEvents => {
this.tableData = listedEvents;
});
然后我有一些功能链接到我的 html 如下
pageChange(event) {
this.page$.next(event);
}
dateChange(event) {
this.dateRange$.next(event);
this.page$.next(1);
}
如果我更改日期,我希望它将页面重置为第 1 页,但意外的结果是 API 调用被启动了两次。首先是设置 dateRange 时,其次是页面重置时
一个可能的解决方案是使用 switchmap,但它仍然会触发两次,并且在第二次发射发生时取消第一次,但这对我来说似乎不正确。
我想我也可以使用去抖动,但这真的是最好的解决方案吗?
一个可能的解决方案是将要更改的所有参数放在一个对象中。这确实有意义,因为它们都是请求的一部分。
pageChange(event) {
this.requestModel$.next({
...this.requestModel,
page: event
);
}
dateChange(event) {
this.requestModel$.next({
...this.requestModel,
dateRange: event,
page: 1
);
}
这样你可以对请求模型进行多次更改,它只会触发一次请求。