如果我可以使用结构指令控制 DOM 内容,为什么还要使用 Route Resolver?

Why to use Route Resolver if I can control DOM content using structural directives?

我正在学习 Angular 路由解析器的使用,并且从网络上的一些资源中,我了解到这些用于在导航事件之后和我们的组件加载之前执行操作。

但是,如果我可以使用像 *ngIf 这样的结构指令来控制 DOM 的加载,并在加载 DOM 之前在 ngOnInit() 中执行所需的操作,那么什么是解析器的用例。

它们是高效的性能优化器吗? 是否有特定情况下我除了使用解析器别无选择?

(我以https://stackblitz.com/edit/angular-route-resolvers为例)。

解析器可能有用的原因有很多:

  • 页面内容和 URL 在加载数据之前不会更改。所以如果加载失败,用户面前不是空白页面,可以再次点击link重试。
  • 它使模板更易于编写,因为您不必处理尚未加载或部分加载的数据
  • 它使组件的代码更简单,因为组件只需要显示解析器提供的数据,而不是自己加载它(如果参数发生变化则重新加载)。
  • 如果一致使用,解析器允许使用路由器事件来显示一些通用的加载指示器,而如果每个组件加载自己的数据,您可以将此代码集中在一个地方
  • 解析器可以在需要相同数据的多个路由之间共享

他们的缺点是

  • 这是另一个要编写的服务,它在一个或多个额外的地方稀释了组件的代码
  • 它会给人一种缓慢的感觉,因为在数据加载之前页面上没有任何变化

我发现解析器在这两种情况下很有用:

  1. 当我们启用页面动画时,例如将页面滑动到路由器插座中的left/right。动画更流畅,因为只有在解析数据后才加载组件。
  2. 当需要在子路由组件之间共享数据时(尽管可以仅使用服务来实现)。

对于其他所有我使用 *ngIf