And*_*ewP 7 ngrx angular ngrx-store
使用 Angular 和 ngrx,我想导航到路线并确保 ngrx/store 中提供所需的数据。我正在使用 ngrx/store action/effect/reducer 来物理调用 API。路由正在加载的组件通过存储访问数据,因为系统的其他部分可能会更新数据。
如果数据加载失败,则会调度 LOAD_FAILED 操作,可以通过多种方式处理该操作。
我应该使用守卫还是解析器?每种方法还有哪些其他优点和缺点?你尝试过什么,如果有机会再给你一次,你还会这样做吗?以下是我的一些想法。
当访问路由时,guard 的 canActivate 检查数据是否在 store 中,如果没有,则从 API 加载数据,并将其添加到 store 中。如果数据加载失败,canActivate 将返回 false(作为可观察值)。
这种方法的缺点是“加载数据不应该是警卫的责任”,但优点是如果无法加载数据,则可以阻止访问,并且路由器可以处理“未找到”的情况,两者都是都在职责范围内。
当访问该路线并且任何其他防护已允许激活时,解析器将被调用。该解析器检查数据是否在存储中,如果没有,则触发 LOAD 操作,以从 API 加载并添加到存储中。然后,一旦加载了数据,解析器就会返回一些任意数据,当组件使用存储时,这些数据会被路由/组件丢弃。如果数据加载失败,某些内容会重定向到未找到的页面
这种方法的缺点是解析器没有以传统的方式使用,例如它返回的数据被丢弃。此外,解析器在未找到时需要重定向到 404,或者 LOAD_FAILED 需要重定向。这增加了复杂性,因为有时 LOAD_FAILED 可能不应该重定向,例如当后台操作触发加载时。从好的方面来说,解析器负责加载数据。
小智 2
我认为在你的情况下,你可以使用守卫或解析器。
我个人认为Resolvers更适合预取数据。我认为丢弃数据没有问题。您还可以向最终组件提供一些有关数据检索的有用信息(例如,如果数据仅部分可用)。
我不太明白在解析器中进行重定向的缺点是什么意思。我相信不存在这样的问题,您可以在 Resolver 中处理重定向,如Angular 指南中所示。在获取失败的基本情况下,路由事件将被取消,用户将保留在当前页面上。
我认为使用 Guards 的唯一真正优势是您可以在队列中执行它们。它可能允许您创建更通用和可重用的 Guard 类,其中每个 Guard 负责检索特定的数据位。另一方面,解析器更特定于路由而不是特定于数据。
| 归档时间: |
|
| 查看次数: |
4075 次 |
| 最近记录: |