В angular2 rc2 с модулем маршрутизатора v 3.0.0.6alpha я расширяю RouterOulet, чтобы проверить, вошел ли пользователь в систему, прежде чем обращаться к администратору. Так что это код:Angular2 - Расширяющийся роутер и наблюдаемый
@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
Уход!Еще раз спасибо –