canActivate后卫只有在刷新后才能工作

时间:2017-08-04 08:47:20

标签: angular routing angular2-routing canactivate

我可以激活所有路线上的守卫(在父路线上)。当我第一次去任何链接时,它可以正常工作,但是当我改变路线时,它不起作用。 Guard是关于登录用户的(如果api返回我登录,我返回true,否则我将其重定向到登录页面) 我该做什么? 感谢

1 个答案:

答案 0 :(得分:2)

在您定义的同一个防护中,实现CanActivateChild接口,并调用相同的逻辑。在您的路线中,定义CanActivate和CanActivateChild。

在你的守卫中

@Injectable()
export class MyGuard implements CanActivate, CanActivateChild {

  constructor() {}

  canActivate() {
    // Your logic here to identify the value to return
  }

  canActivateChild() {
     return this.canActivate();
  }
}

在您的路由

let routes:Routes = [
 { 
   path: 'myPath', 
   canActivate: [ MyGuard ] 
   canActivateChild: [ MyGuard ],
   children: [
     { path: 'mychild1', .... },
     { path: 'mychild2', .... }
   ]
]

阅读本指南,了解angular.io重新保护儿童路线:https://angular.io/guide/router#canactivatechild-guarding-child-routes