
需求:
两个 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 个项目用这个,项目结束了我还对这个东西迷迷瞪瞪的。后边的项目我都建议不要用这个了。 |