2

canActivateAngular のルーターで使用されるガードを構成する方法はありますか?

これを持っているSessionGuard

@Injectable()
export class SessionGuard implements CanActivate {

    public requireLeagues: boolean = true;

    constructor(private authService: AuthService, private session: SessionService, private router: Router) {
    }


    async canActivate(): Promise<boolean> {
        if (!this.authService.isLoggedIn) {
            return false;
        }

        await this.session.start();

        if (this.requireLeagues && (!this.session.leagues || this.session.leagues.length == 0)) {
            //Redirect to create league page
            this.router.navigate(['/create-league']);

            return false;
        } else {
            return true;
        }
    }
}

そして、このルート:

const routes: Routes = [
    {path: '', component: HomeComponent, canActivate: [AuthGuard, SessionGuard]},// <-- requireLeagues = false
    {path: 'login', component: LoginComponent},
    {path: 'leagues', component: [AuthGuard, SessionGuard]},
];
@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
export class AppRoutingModule {
}

requireLeagues新しい別のガードを作成することなく、ルートに応じて true または falseに設定したいと考えています。これは可能ですか?

4

1 に答える 1