V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ccsulzf0627
V2EX  ›  问与答

关于 Rxjs 请教一个问题

  •  1
     
  •   ccsulzf0627 · 2020-03-26 17:35:45 +08:00 · 1115 次点击
    这是一个创建于 1701 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:

    两个 Observable
    
    过滤条件 Observable
    分页 Observable
    
    过滤条件改变和分页的改变都要请求后台
    combinaLast ( A,B )将过滤条件和分页组装传到后台的
    
    但是过滤条件改变我点击查询,分页要重新从第一页开始
    

    当前解决办法:

    我在分页组件中监听过滤条件的改变,然后初始化,重新用分页的 Observable 发送初始值
    但是 combinaLast 会抛出两次
    

    求助:

    这样的需求,怎么设计才合理呢?
    
    第 1 条附言  ·  2020-03-27 10:59:50 +08:00

    自己目前的解决办法: 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;
     });
    
    4 条回复    2020-03-26 19:39:56 +08:00
    9ki
        1
    9ki  
       2020-03-26 17:50:19 +08:00
    感觉你这个有点强行用 rxjs 的味道,如果要解决现在这个问题可以用 distinctUntilChanged 操作符,判断一下是否和上一次相同即可
    ccsulzf0627
        2
    ccsulzf0627  
    OP
       2020-03-26 17:54:16 +08:00
    @9ki 假如分页条件是 5,我点击查询,然后 combinaLast 发出是 5,这是第一次,然后分页组件监听到过滤条件的改变,初始化为 1,然后 combinaLast 发出是 1,这是第二次
    rrfeng
        3
    rrfeng  
       2020-03-26 18:21:45 +08:00
    创建一个 Subject 用来接收变更事件。
    两个条件存到两个变量里。并且 subscribe 对应的 Observable 进行更改,并且给上面的 Subject 发消息。

    通过监听 Subject 来发起 http 请求,获取数据,参数从变量里取。
    mara1
        4
    mara1  
       2020-03-26 19:39:56 +08:00
    这个玩意儿是真难用,我写过 1 个项目用这个,项目结束了我还对这个东西迷迷瞪瞪的。后边的项目我都建议不要用这个了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:13 · PVG 06:13 · LAX 14:13 · JFK 17:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.