需求:
两个 Observable
过滤条件 Observable
分页 Observable
过滤条件改变和分页的改变都要请求后台
combinaLast ( A,B )将过滤条件和分页组装传到后台的
但是过滤条件改变我点击查询,分页要重新从第一页开始
当前解决办法:
我在分页组件中监听过滤条件的改变,然后初始化,重新用分页的 Observable 发送初始值
但是 combinaLast 会抛出两次
求助:
这样的需求,怎么设计才合理呢?
自己目前的解决办法: conditionList -- 保存过滤条件 filterCondition$ -- 过滤条件变更 composeFilter$ -- 组装最终的条件请求后台
过滤条件的改变,conditionList保存每一次的变更,初始化分页
updateFilterCondition(value) {
this.conditionList = value;
this.filterCondition$.next(value);
this.composeFilter$.next(this.compose([value, {
skip: 0,
take: 100
}]));
}
分页条件的变更,使用之前保存的conditionList
updateFilterPage(value) {
this.composeFilter$.next(this.compose([this.conditionList, value]));
}
分页组件中监听条件的变化,重新从第一页开始
this.reportFilterService.filterConditionChange().subscribe(() => {
this.pageIndex = 0;
});
1
9ki 2020-03-26 17:50:19 +08:00
感觉你这个有点强行用 rxjs 的味道,如果要解决现在这个问题可以用 distinctUntilChanged 操作符,判断一下是否和上一次相同即可
|
2
ccsulzf0627 OP @9ki 假如分页条件是 5,我点击查询,然后 combinaLast 发出是 5,这是第一次,然后分页组件监听到过滤条件的改变,初始化为 1,然后 combinaLast 发出是 1,这是第二次
|
3
rrfeng 2020-03-26 18:21:45 +08:00
创建一个 Subject 用来接收变更事件。
两个条件存到两个变量里。并且 subscribe 对应的 Observable 进行更改,并且给上面的 Subject 发消息。 通过监听 Subject 来发起 http 请求,获取数据,参数从变量里取。 |
4
mara1 2020-03-26 19:39:56 +08:00
这个玩意儿是真难用,我写过 1 个项目用这个,项目结束了我还对这个东西迷迷瞪瞪的。后边的项目我都建议不要用这个了。
|