我正在为我的一个应用程序组件实现canActivate
防护。
基于documentation,UrlTree
和Observable<UrlTree>
都是有效的返回类型。
我了解到,通过将“事物”包装到可观察对象中将使事物变得异步,但是我不理解路由器/路由上下文的区别。
UrlTree
和Observable<UrlTree>
在路由器如何处理方面有什么区别?
您何时将另一个使用?
我假设相同的理由也可以应用于<boolean>
和Observable<boolean>
UrlTree版本:
export class myGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.router.parseUrl('newRoute');
}
}
可观察的版本:
import { of } from 'rxjs';
export class myGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return of(this.router.parseUrl('newRoute'));
}
}
我已经尝试过两个版本,并且都可以在开发环境中正常工作。
答案 0 :(得分:2)
区别在于警卫如何对待响应类型...如果是可观察的,它会订阅并使用订阅的值来做出路由决策。如果不是可观察的,则仅使用返回的值来做出决定。这是为了方便起见,但并不强制为您的后卫提供异步功能。
当您根据异步内容(例如主题值或http请求或类似内容)做出决定时,请使用可观察的内容。当您基于同步的内容(例如localStorage值或其他内容)做出决定时,请使用不可观察的结果。