Angular16 中的 Router parseUrl() 与 navigate()

问题描述 投票:0回答:1

我处于使用 authGuard 进行身份验证。我想知道这两个有什么区别

//重定向到登录页面

return router.navigate(['/login']);
return router.parseUrl('/login');

在 Angular 官方文档中显示 router.parseUrl('/login'); 用于重定向到登录页面 https://angular.io/guide/router-tutorial-toh#canactivate-requiring-authentication

但是在其他在线教程网站中,他们使用的是 return router.navigate(['/login']);

这两者有什么区别?

angular angular-ui-router angular-router angular-router-guards canactivate
1个回答
0
投票

“主要优点是优先级。使用旧的 API,无法确定重定向的优先级。假设您有多个守卫活动执行异步验证并在失败时重定向。这完全取决于这些异步操作的执行时间:无论哪一个异步防护最后调用了重定向,都是获胜者。现在返回一个 UrlTree 而不是直接运行重定向,Angular 可以负责执行它并确保正确确定多个可能运行的路由防护的优先级。优先级的工作原理是给出最接近应用程序根的守卫具有最高优先级。因此,如果子守卫返回 false 或 UrlTree 但其父守卫尚未解析,它将等待父守卫解析。如果父守卫检查失败,它将优先于所有其他。

取消另一个好处是可以取消所有其他导航事件。每当从路由防护返回 UrlTree 时,Angular 都会触发 NavigationCancel 事件,从而有效地取消所有正在运行的导航事件并启动指向指定 URL 的新导航。”

完整文章:https://juri.dev/blog/2018/11/better-route-guard-redirects/

© www.soinside.com 2019 - 2024. All rights reserved.