为什么要使用Angular的解析器?

前端之家收集整理的这篇文章主要介绍了为什么要使用Angular的解析器?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我喜欢旋转变压器的想法.

你可以这么说吧:
– 对于给定的路径,您希望首先加载一些数据
– 你可以拥有一个没有可观察性的非常简单的组件(从this.route.snapshot.data中检索数据)

解析器很有意义.

但:
– 在收到实际响应之前,您不会更改URL并显示所请求的组件.因此,您不能(简单地)通过渲染组件并尽可能多地显示用户显示用户正在发生的事情(就像建议使用PWA的shell应用程序一样).这意味着当连接不良时,您的用户可能只需等待很长时间没有视觉指示发生了什么
– 如果你在使用param的路由上使用解析器,让我们以users / 1为例,它将在第一次正常工作.但是如果你去用户/ 2,除非你开始使用另一个observable,否则什么都不会发生:this.route.data.subscribe()

所以感觉解析器可能有助于检索一些数据但在实践中我不会使用它们以防万一网络速度慢,尤其是对于带有参数的路由.

我在这里错过了什么吗?有没有办法将它们与那些真正的约束一起使用?

解析器在路由器导航开始附近为您提供一个钩子,它可以让您控制导航尝试.这给了你很多自由,但没有很多硬性和快速的规则.

您不必在组件中使用resolve的结果.您可以将resolve用作钩子.由于您引用的原因,这是我使用它的首选方式.在组件中使用结果要简单得多,但它具有这些同步权衡.

例如,如果您使用的是Material或Cdk之类的东西,则可以调度“加载”对话框以在解析开始时显示进度指示器,然后在解析结束时关闭对话框.像这样:

constructor(route: ActivatedRouteSnapshot,myService: MyService,dialog: MatDialog) {}

resolve() {
    const dialogRef = this.dialog.open(ProgressComponent);
    return this.myService.getMyImportantData().pipe(
        tap(data => this.myService.storeData(data)),tap(() => dialogRef.close()),map(() => true),catchError(err => of(false))
    );
}

如果您正在使用ngrx,则可以通过在解析正在进行时调度操作来执行类似操作.

当你以这种方式使用Resolve后卫时,没有特别强烈的理由使用Resolve后卫而不是CanActivate后卫.这种选择归结为语义.我发现在CanActivate上进行身份验证并从Resolve启动数据检索更为明显.当这些主题被允许混合时,它就成了一个不经意的选择.

原文链接:https://www.f2er.com/angularjs/143719.html

猜你在找的Angularjs相关文章