小编kit*_*kit的帖子

ngrx url 作为过滤功能中的单一事实来源

我正在开发一个功能,您可以通过不同的标准过滤实体。选定的标准反映在 UI 过滤器和芯片中。这个想法是将过滤器存储在 URL 中。

申请流程如下:

  => queryParams are parsed and mapped to filters
  => filters are stored in store 
    => chips are calculated based on filters
    => api call is triggered to fetch data
Run Code Online (Sandbox Code Playgroud)

当 UI 事件发生时,ngrx/effect 会处理它,例如。我们想通过单击芯片来删除过滤器。Effect 方法获取单击的芯片和当前状态,然后从中计算 queryParams 并使用新的 queryParams 触发导航。效果管的最后一个元素如下所示:

const filters = selectFilters(storeState);
filter.removeValue(value);
return this.router.navigate(['some route'], {
  queryParams: filters.toQueryParams()
});
Run Code Online (Sandbox Code Playgroud)

看起来我的作用是进行某种状态管理,这让我感到惊讶。

我将非常感谢这种方法的验证。

ngrx ngrx-effects angular

5
推荐指数
0
解决办法
379
查看次数

平面图中的rxjs条件

我想在flatMap中有一个条件来检查第一个observable返回的内容.如果条件不满足,我想打破并导航到不同的页面.

this.service.getData(id)
  .flatMap((data) => {
    if (!data) {
      return Observable.throw(new NoDataFoundError());
    }
    return Observable.forkJoin(
      this.service.getData2(id2),
      this.service.getData3(id3),
    );
  })
  .subscribe(
    ([data2, data3]) => {
      this.data2= data2;
      this.data3= data3;
    },
    (err) => {
      if (err instanceof NoDataFoundError) {
        this.router.navigate(...);
      }
    }
  );   
Run Code Online (Sandbox Code Playgroud)

目前我正在抛出特定错误并捕获它但是我不喜欢这个解决方案,因为它不是唯一可能引发错误的代码片段而if不是缩放.

我考虑过filter或takeWhile操作符,但我无法执行重定向.

我还考虑过返回Observable.of而不是扔(第4行),但后来我必须在订阅中做if也闻起来.

rxjs angular

2
推荐指数
1
解决办法
893
查看次数

标签 统计

angular ×2

ngrx ×1

ngrx-effects ×1

rxjs ×1