重定向而不加载Angular 2/4中的路径组件

时间:2017-08-27 20:30:26

标签: angular typescript

我为我的注册路线定义了一个解析器:

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

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

在解析器中,如果用户已登录,我会重定向到某个页面:

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

但是,在重定向到主板页面之前,角度加载SignupComponent

注意:我已尝试使用CanActivate后卫,但由于isUserAuthenticated()方法返回{Observable方法,因此无法在不加载组件的情况下重定向1}}并且没有同步工作方式。

我真的想知道是否可以在角度下重定向到主板页面而不加载SignupComponent

可以在角度2/4中顺利完成吗?

如果有人帮助我,我真的很感激。

1 个答案:

答案 0 :(得分:1)

如果使用CanActivate后卫代替Resolve,那么重定向将是平滑的。然后它不会在重定向之前加载路由组件SignupComponent

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

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

is-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;
                   }
               );
}