我为我的注册路线定义了一个解析器:
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中顺利完成吗?
如果有人帮助我,我真的很感激。
答案 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;
}
);
}