2017-04-21 46 views
0

我有一个家庭组件和角度为2的导航面板组件。当用户在导航面板(侧栏)上单击注销时,通过将路由器记录到控制台,将当前URL正确报告为“/ login”。当用户再次登录时,导航面板中的路由器实例在用户登录后将当前路由报告为“/ login”,路由器应将它们带到主页。因此,用户永远无法越过登录屏幕,并且浏览器中的视图和网址不会更新。如何强制路由器更新Angular 2中的当前路由?

到目前为止,我已经试过如下:

  1. 手动清除浏览器缓存并刷新页面(这似乎是解决这个问题)
  2. 结束语中ngZone通话的电话router.navigate。运行()
  3. 在主件组件的构造函数中清除Angular 2的模板缓存。

下面是一些代码相关部分: 在用户登录后,处理导航(在login.component.ts)的方法

private doAfterLoggedIn() { 
    let returnRoute = this.route.snapshot.queryParams["ReturnUrl"] || "/"; 
    this.toaster.toast({ 
     title: `Welcome back!`, 
     duration: 2000 
    }); 
    this.router.navigate([returnRoute]); 
} 

适用于家庭的组件的路径:

{ 
    path: '', 
    pathMatch: 'full', 
    component: HomeComponent, 
    resolve: { author: RouteAuthorResolver }, 
    data: { 
     panelsectionName: "home" 
    } 
}, 

注销方法在NAV面板组分A部分:

doLogout() { 
    // leave immediately 
    this.router.navigate(["/login"]); 
} 
+1

对于初学者来说,你正在尝试做的事情应该是有效的。我在Pluralsight的“Angular Routing”课程中做了同样的事情。 'returnRoute'的价值是什么?此外,使用重定向时只需要'pathMatch',而不是在导航到组件时。 – DeborahK

+0

黛博拉,谢谢你的帮助。我从路线中移除了pathMatch,但没有运气。 returnRoute看起来像这样:代码中的“/ Projects”,如下所示:url:“https:// localhost:44358/login?ReturnUrl =%2FProjects”。 –

+0

@DeborahK我也在周末看了一下你的课程,我认为这个问题可能是路由排序,但它们都在一个模块中,而不是多个模块。 –

回答

1

假设您的引导组件是HomeComponent,所以在它的构造函数中检查登录名是否重定向到登录组件。

constructor(activatedRoute: ActivatedRoute,router:Router){ 
    if(this.activatedRoute.url !== 'login'){ 
     if(!userService.geToken()){ 
       this.router.navigate(["/login"]); 
     } 
    } 
} 
+0

感谢您的建议,但我还没有与此有任何运气。导航仍然不会发生。 –

相关问题