2017-08-27 8 views
0

でルートコンポーネントをロードせずに、私は私のサインアップルートのリゾルバを定義しました:はリダイレクトは角2/4

resolve(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) { 
    this.authService.isUserAuthenticated() 
       .subscribe(
        (res: any) => { 
         if (res === true) { 
          this.router.navigate(['/main-board']); 
         } 
        } 
       ); 
} 

しかし、角度はメインボードページにリダイレクトする前に、とにかくSignupComponentをロードします。

注:私はCanActivateガードで試してみたが、それはまだisUserAuthenticated()方法はObservableを返し、同期ように動作しませんようcomponenetをロードせずにリダイレクトすることはできません。

SignupComponentをロードせずにメインボードページにリダイレクトできるかどうか本当に知りたいです。

角度2/4で滑らかにできますか?

誰かが私を助けてくれたら本当に感謝します。

+4

は、あなたのケースのために警備員を使用することを検討してください。たぶんCanActivateガード? https://angular.io/api/router/CanActivate – eroak

+0

'CanActivate'ガードは' isUserAuthenticated() 'メソッドが' Observable'を返すので、コンポーネントをロードせずにリダイレクトできません。 – asmmahmud

答えて

0

Resolveの代わりにCanActivateガードが使用された場合、リダイレクトは円滑になります。そして、それは、リダイレクトする前に、ルートコンポーネントSignupComponentをロードしません。

import {IsLoggedin} from './share/is-loggedin.service'; 

const appRoutes: Routes = [ 
    {path: 'signup', canActivate: [IsLoggedin], component: SignupComponent} 
] 

インクルードが-loggedin.service.tsです:

canActivate(route: ActivatedRouteSnapshot, routerState: RouterStateSnapshot) { 
    /* this.authService.isUserAuthenticated() return an http Observable */ 
    return this.authService.isUserAuthenticated() 
       .map((res: any) => { 
         if (res === true) { 
          this.router.navigate(['/main-board']); 
          return false; 
         } 
         return true; 
        } 
       ); 
} 
関連する問題