如果我可以使用结构指令控制 DOM 内容,为什么还要使用 Route Resolver?
Why to use Route Resolver if I can control DOM content using structural directives?
我正在学习 Angular 路由解析器的使用,并且从网络上的一些资源中,我了解到这些用于在导航事件之后和我们的组件加载之前执行操作。
但是,如果我可以使用像 *ngIf
这样的结构指令来控制 DOM 的加载,并在加载 DOM 之前在 ngOnInit()
中执行所需的操作,那么什么是解析器的用例。
它们是高效的性能优化器吗? 是否有特定情况下我除了使用解析器别无选择?
解析器可能有用的原因有很多:
- 页面内容和 URL 在加载数据之前不会更改。所以如果加载失败,用户面前不是空白页面,可以再次点击link重试。
- 它使模板更易于编写,因为您不必处理尚未加载或部分加载的数据
- 它使组件的代码更简单,因为组件只需要显示解析器提供的数据,而不是自己加载它(如果参数发生变化则重新加载)。
- 如果一致使用,解析器允许使用路由器事件来显示一些通用的加载指示器,而如果每个组件加载自己的数据,您可以将此代码集中在一个地方
- 解析器可以在需要相同数据的多个路由之间共享
他们的缺点是
- 这是另一个要编写的服务,它在一个或多个额外的地方稀释了组件的代码
- 它会给人一种缓慢的感觉,因为在数据加载之前页面上没有任何变化
我发现解析器在这两种情况下很有用:
- 当我们启用页面动画时,例如将页面滑动到路由器插座中的left/right。动画更流畅,因为只有在解析数据后才加载组件。
- 当需要在子路由组件之间共享数据时(尽管可以仅使用服务来实现)。
对于其他所有我使用 *ngIf
我正在学习 Angular 路由解析器的使用,并且从网络上的一些资源中,我了解到这些用于在导航事件之后和我们的组件加载之前执行操作。
但是,如果我可以使用像 *ngIf
这样的结构指令来控制 DOM 的加载,并在加载 DOM 之前在 ngOnInit()
中执行所需的操作,那么什么是解析器的用例。
它们是高效的性能优化器吗? 是否有特定情况下我除了使用解析器别无选择?
解析器可能有用的原因有很多:
- 页面内容和 URL 在加载数据之前不会更改。所以如果加载失败,用户面前不是空白页面,可以再次点击link重试。
- 它使模板更易于编写,因为您不必处理尚未加载或部分加载的数据
- 它使组件的代码更简单,因为组件只需要显示解析器提供的数据,而不是自己加载它(如果参数发生变化则重新加载)。
- 如果一致使用,解析器允许使用路由器事件来显示一些通用的加载指示器,而如果每个组件加载自己的数据,您可以将此代码集中在一个地方
- 解析器可以在需要相同数据的多个路由之间共享
他们的缺点是
- 这是另一个要编写的服务,它在一个或多个额外的地方稀释了组件的代码
- 它会给人一种缓慢的感觉,因为在数据加载之前页面上没有任何变化
我发现解析器在这两种情况下很有用:
- 当我们启用页面动画时,例如将页面滑动到路由器插座中的left/right。动画更流畅,因为只有在解析数据后才加载组件。
- 当需要在子路由组件之间共享数据时(尽管可以仅使用服务来实现)。
对于其他所有我使用 *ngIf