在ngrx环境中如何管理Angular解析器

4
路由为 /sim/:id。
我使用 Angular 解析器向 GET /api/sim/{id} 发送 HTTP 请求以获取单个数据(页面标题),该数据在布局组件中使用。响应是一个大的 JSON 对象,但我只需要一个单独的数据。
然后,在与此路由相关联的主要组件中,我调度了一个 ngrx action,触发一个 effect,该 effect 执行相同的请求 GET /api/sim/{id} 并使用响应填充 store。
然后,我使用 ngrx selector 从 store 中检索数据,并且视图得到填充(FYI 视图使用了响应数据的很多内容)。
这样做没有问题,但我正在向同一端点进行 2 次 HTTP 请求。我怎样最好地避免这种情况?我不需要代码,只需要一些指导。谢谢。
我正在使用最新版本的 Angular 和 ngrx。

1
你可以设置某种缓存,或使用Observable操作符throttleTime:https://www.learnrxjs.io/operators/filtering/throttletime.html - Pac0
如果我理解正确:您需要该数据用于AppComponent更改标题,并且某个子组件使用其余数据进行填充?我是对的吗? - Nery Ortez
没错,就是这样 :) - danday74
1个回答

4
TL;DR: 使用解析器中的数据。
不要通过触发一个要求获取数据的事件来触发效果并重复触发一个新的动作来填充存储。可以让解析器使用数据来触发最后一个动作,以填充存储。
请查看此文章获取更多想法。
更新:
另一个想法是:在提供程序中将所有信息存储在路由器数据中。
假设你只是使用解析器来存储标题属性(因为这是父组件所需的全部内容),并通过this.router.snapshot.data访问它。如果存储了全部数据,则也可以通过以下方式从子组件获得控制权:
this.router.parent.snapshot.data

哇,这是个很棒的想法 :) 我会阅读这篇文章 - 如果没有更好的答案出现,我会接受它。 - danday74
看看那些……我认为你不会得到比那些更好的答案 ;) 你已经在解析器中拥有了数据。从那里使用它。或者使用一个服务,但是解析器给用户带来了更好的“页面加载”感觉。 - Nery Ortez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接