为什么Angular路由器URL在使用CanActivate时重新加载时与文档位置不同

时间:2016-11-30 19:57:59

标签: angular angular2-routing

我有一个简单的路由器设置Angular 2.当我刷新我的页面路由器时:路由器对象的url值与文件对location.hash属性的值不同。

所以我说router.url我得到"/"但是当我在同一个断点上运行document.location.hash时,我得到"#/thing/edit;name=asdasdasdsa"

为什么它不能识别这个哈希?一旦重新加载完成,它工作正常,我有......

{provide: LocationStrategy, useClass: HashLocationStrategy}

另外,我正在使用CanActivate Guard。

1 个答案:

答案 0 :(得分:0)

到目前为止,我目前唯一的解决方案是将router.navigate包裹在setTimeout中。我真的想要一个更好的选择。

喜欢这个......

canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
) {
    let nextUrl = route.url[0].path;
    return this.authService.authenticate().map( (message) => {
        if (message["isAuthenticated"]) {
            // TODO: Super hacky
            setTimeout(() => {
                this.authService.navigateToPage(nextUrl);
            });
            return true;
        }
        return false;
    });
}