라우터 모듈 v 3.0.0.6alpha가있는 angular2 rc2에서 관리자에 액세스하기 전에 사용자가 로그인했는지 확인하기 위해 RouterOulet을 확장합니다. 코드는 다음과 같습니다.Angular2 - 확장 라우터 및 Observable
@Directive({
selector: 'router-outlet'
})
export class LoggedInRouterOutlet extends RouterOutlet
{
publicRoutes: Array<string>;
private parentOutletMap: RouterOutletMap;
private userService: UserService;
private parentRouter: Router;
constructor(
parentOutletMap: RouterOutletMap,
_location: ViewContainerRef,
@Attribute('name') name: string,
userService: UserService,
parentRouter: Router
) {
super(parentOutletMap, _location, name);
this.parentRouter = parentRouter;
this.parentOutletMap = parentOutletMap;
this.userService = userService;
this.publicRoutes = [
'public',
'login'
];
}
activate(factory: ComponentFactory<any>, activatedRoute: ActivatedRoute, providers: ResolvedReflectiveProvider[], outletMap: RouterOutletMap)
{
if (this._canActivate(factory.selector)) {
return super.activate(factory, activatedRoute, providers, outletMap);
}
this.parentRouter.navigate(['/login']);
}
_canActivate(url) {
return this.publicRoutes.indexOf(url) !== -1 || this.userService.isLoggedIn()
}
}
userService.isLoggedIn()은 부울을 반환해야합니다. 내 질문은 : 사용자가 로그인했는지 확인하기 위해 HTTP 호출을 만들기 위해 코드를 어떻게 적용합니까? isLoggedIn 메서드가 관찰 가능 객체를 반환하고 그것을 구독하기 때문에 부모 함수에서 결과를 반환 할 수 없기 때문입니다.
좋은 것 같은데, 감사합니다! 하지만 경비원을 어디에 투입해야하는지 궁금합니다. 코드를 편집하여 보여줄 수 있다면 ... –
원래 답변을 게시 한 후 몇 분이 지났음;) 전에 이것을 추가하는 것을 잊었습니다. – Baumi
깔끔한!다시 한 번 감사드립니다 –