35

Angular2 の @CanActivate から別のコンポーネントにリダイレクトする方法はありますか?

4

6 に答える 6

13

ガードは簡単に注射可能であり、それ自体に注射可能を含めることができます。したがって、リダイレクトするために、単純にルーターを挿入できます。アプリ モジュールにプロバイダーとしてサービスを追加することを忘れないでください。

@Injectable()
export class AuthGuard implements CanActivate {

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

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
    if (!authService.isAuthenticated()) {
      this.router.navigate(['/login']);
      return false;
    }
    return true;
  }
}

export const ROUTES: Routes = [
  {path: 'login', component: LoginComponent},
  {path: 'protected', loadChildren: 'DashboardComponent', canActivate: [AuthGuard]}
];
于 2016-10-14T15:27:56.523 に答える
3

UrlTreeAngular 7.1 以降、次の代わりに返すことができますboolean

@Injectable({
  providedIn: 'root',
})
export class AuthGuard implements CanActivate {

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

  canActivate(): boolean | UrlTree {
    return this.authService.isAuthenticated() || this.router.createUrlTree(['/login']);
  }
}
于 2019-03-27T20:22:03.827 に答える