我处于使用 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']);
这两者有什么区别?
“主要优点是优先级。使用旧的 API,无法确定重定向的优先级。假设您有多个守卫活动执行异步验证并在失败时重定向。这完全取决于这些异步操作的执行时间:无论哪一个异步防护最后调用了重定向,都是获胜者。现在返回一个 UrlTree 而不是直接运行重定向,Angular 可以负责执行它并确保正确确定多个可能运行的路由防护的优先级。优先级的工作原理是给出最接近应用程序根的守卫具有最高优先级。因此,如果子守卫返回 false 或 UrlTree 但其父守卫尚未解析,它将等待父守卫解析。如果父守卫检查失败,它将优先于所有其他。
取消另一个好处是可以取消所有其他导航事件。每当从路由防护返回 UrlTree 时,Angular 都会触发 NavigationCancel 事件,从而有效地取消所有正在运行的导航事件并启动指向指定 URL 的新导航。”
完整文章:https://juri.dev/blog/2018/11/better-route-guard-redirects/