angular2 路由 - Angular 2 路由器在升级到 RC.3 后不会重新路由到正确的路由



自从 angular 2 版本更改以来,我对路由器中navigate的功能有问题。我将版本从 2.0.0-rc.1 升级到 2.0.0-rc.3所以我不得不像这样更改路由器的版本:

@angular/路由器:2.0.0-rc.13.0.0-alpha.7

我创建了一个包含所有路由的文件。

export const routes:RouterConfig = [
    { path: '', component: Home, terminal: true },
    { path: 'home', component: Home },
    { path: 'login', component: Login },
    ...

然后我将路由添加到引导函数中

bootstrap(AppComponent, [
    AppWebservice,
    HTTP_PROVIDERS,
    APP_ROUTER_PROVIDERS,
    provide(Config, {useClass: Config})
]).catch(err => console.error(err));

我有一个带有此代码的组件:

ngOnInit() {
    console.log('isLoggedin: ' + isLoggedin())
    if (isLoggedin()) {
        this.router.navigate(['/home']);
    } else {
        this.router.navigate(['/login']);
    }
}

在此组件中,代码this.router.navigate(['/login']);很好地与 2.0.0-rc.1 配合使用,但现在它不适用于新版本。我检查了isLoggedin()的值,当它的值为 false 时,我仍然被重新路由到主页而不是登录页面。

有谁知道为什么路由器无法正常工作?

这是您应该如何为路线设置守卫的基本示例。

在需要重定向的路由上添加canActivate: [HomeGuard]

您需要创建一个服务,以便将isLoggedin注入到防护中。

当然,还要创建警卫注射剂。

如果您有任何其他问题,请告诉我。

export const routes:RouterConfig = [
    { path: '', component: Home, terminal: true, canActivate: [HomeGuard]},
    { path: 'home', component: Home },
    { path: 'login', component: Login },

  @Injectable()
  export class HomeGuard implements CanActivate {
    constructor(provate isLoggedinService: IsLoggedinService, private router: Router) {}
    canActivate() {
      console.log('this.isLoggedinService.isLoggedin: ' + this.isLoggedinService.isLoggedin())
      if (this.isLoggedinService.isLoggedin()) {
          this.router.navigateByUrl('home');
          return false;
      } else {
          this.router.navigateByUrl('login');
          return false;
      }
    }
  }

最新更新