Angular Can';无法获取“路由器.导航”以导航

Angular Can';无法获取“路由器.导航”以导航,angular,Angular,我一直很难弄清楚如何保护路由不受直接访问,发现每次访问组件时,Resolve都会触发。我创建了以下解析器: export class LoginResolver implements Resolve<Boolean> { constructor(private router: Router, private userService: UserService) { } resolve(route: ActivatedRouteSnapshot, state: Rou

我一直很难弄清楚如何保护路由不受直接访问,发现每次访问组件时,
Resolve
都会触发。我创建了以下解析器:

export class LoginResolver implements Resolve<Boolean> {

    constructor(private router: Router, private userService: UserService) { }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Boolean> {
        return this.userService.watchCurrentUser().map((currentUser) => {
            if (currentUser !== null) {
                this.router.navigate(['/']);
                return null;
            } else {
                return true;
            }
        });
    }

}
导出类LoginResolver实现解析{
构造函数(专用路由器:路由器,专用用户服务:用户服务){}
解析(路由:ActivatedRouteSnapshot,状态:RouterStateSnashot):可观察{
返回此.userService.watchCurrentUser().map((currentUser)=>{
如果(currentUser!==null){
this.router.navigate(['/']);
返回null;
}否则{
返回true;
}
});
}
}

据我所知,解析器可以工作。如果我记录数据,它会显示我期望的结果,但是,即使第一个If语句成功(通过添加大量If块而不是If块进行测试),页面也不会自动离开。我基本上是从路由器教程中复制了代码,所以不确定我遗漏了什么。有明显的错误吗?

这是一个活跃的守卫的角色。不是决心的作用。我以为Resolve是用来在访问路由时获取数据的?即使是Angular Router文档也显示了基于返回的数据进行路由的解析。另外,如果您直接访问路由,则CanActivate不会被击中,而Resolve会被击中。是的,它用于这样做。但是你试图用它来阻止导航到路线。不加载数据。阻止对路由的访问是CanActivate guard的作用。我需要首先获取数据,所以将使用resolve。无论我是否正确使用它,我都很乐意更改它,但这并不能解释为什么navigate不起作用。这是Angular文档中的一个例子,它告诉我它应该工作,即使我不应该这样编码。正如我前面所说的,CanActivate不会阻止直接访问路径(通过将路径输入地址栏)。