Angular 什么';s可观察到的和lt;UrlTree>;树呢?

Angular 什么';s可观察到的和lt;UrlTree>;树呢?,angular,rxjs,observable,angular-router,angular-router-guards,Angular,Rxjs,Observable,Angular Router,Angular Router Guards,我正在为我的一个应用程序组件实现一个canActivateguard 基于,UrlTree和Observable都是有效的返回类型 我理解将“一件事”包装成一个可观察的东西会使它异步,但我不理解路由器/路由上下文中的区别 就路由器如何处理它们而言,UrlTree和observeable之间有什么区别? 您什么时候使用一个而不是另一个? 我假设同样的理由也适用于和可观察的 UrlTree版本: 导出类myGuard实现CanActivate{ 构造函数(专用路由器:路由器){} canActiva

我正在为我的一个应用程序组件实现一个
canActivate
guard

基于,
UrlTree
Observable
都是有效的返回类型

我理解将“一件事”包装成一个可观察的东西会使它异步,但我不理解路由器/路由上下文中的区别

就路由器如何处理它们而言,
UrlTree
observeable
之间有什么区别?

您什么时候使用一个而不是另一个?

我假设同样的理由也适用于
可观察的

UrlTree版本:

导出类myGuard实现CanActivate{
构造函数(专用路由器:路由器){}
canActivate(路由:ActivatedRouteSnapshot,状态:RouterStateSnashot){
返回此.router.parseUrl('newRoute');
}
}
可观察版本:

从'rxjs'导入{of};
导出类myGuard实现CanActivate{
构造函数(专用路由器:路由器){}
canActivate(路由:ActivatedRouteSnapshot,状态:RouterStateSnashot){
返回(this.router.parseUrl('newRoute'));
}
}

我已经尝试了这两个版本,它们在开发环境中都可以正常工作。

区别在于警卫如何处理响应类型。。。如果它是可观察的,它订阅并使用订阅的值来做出路由决策。如果它不是可观察的,它只使用返回的值来做出决策。它是为了方便而不是强制为您的保护提供异步功能


当你的决定是基于一些不同步的东西时,使用一个可观察的。。。比如主题值或http请求之类的。当你的决定是基于某个同步的东西做出的,比如本地存储值或其他东西时,使用一个不可观察的值。

区别在于警卫如何处理响应类型。。。如果它是可观察的,它订阅并使用订阅的值来做出路由决策。如果它不是可观察的,它只使用返回的值来做出决策。它是为了方便而不是强制为您的保护提供异步功能

当你的决定是基于一些不同步的东西时,使用一个可观察的。。。比如主题值或http请求之类的。当您的决策是基于同步的东西(如本地存储值或其他东西)做出时,请使用不可观察的