如何在没有Angular组件的情况下使用Guard

时间:2019-02-09 00:13:45

标签: javascript angular typescript

我的目标是:当点击链接'auth/login/:tokenKey'时,将触发一种方法,然后重定向A或B组件。对于此链接'auth/login/:tokenKey',不需要组件。只能是ts文件中的方法。

该怎么做?

GetTokenKeyGuard.ts

 canActivate(route: ActivatedRouteSnapshot) {

    localStorage.setItem('token_key', route.params.tokenKey);

    return true;
  }

我不需要为'auth/login/:tokenKey'路径使用组件。在该路径中,将运行一个进程,然后将其重定向到索引页。

但是当我使用'redirectTo'指令时,Guard无法正常工作。

当我与组件一起使用时,Guard可以工作。

如何使用没有组件的防护?

app-routing.module.ts

const routes: Routes = [
  { path: '', component: IndexComponent },
  { path: 'auth/login', component: LoginComponent },

  { path: 'auth/login/:tokenKey',
    canActivate: [GetTokenKeyGuard],
    redirectTo: '' }, //........................ Guard doesnt work.

  { path: 'auth/login/:tokenKey',
    canActivate: [GetTokenKeyGuard],
    component: LoginComponent }, //............. Guard works.
];

1 个答案:

答案 0 :(得分:0)

您可以在下面的路径中使用

 const routes: Routes = [
  { path: '', component: IndexComponent },
  { path: 'auth/login', component: LoginComponent },

  { path: 'auth/login/:tokenKey',
    canActivate: [GetTokenKeyGuard],
    children: [] }
];