В моем модуле угловой маршрутизации я использую базовую навигацию, когда она является домашней страницей по умолчанию, теперь при некоторых условиях я хочу решить, по какому маршруту идти.Так выглядит маршрутизация моего приложения.
{ path: '', redirectTo: 'home1', canActivate: [homepageGuard], pathMatch: 'full' },
{ path: 'home1', loadChildren: './lazyloadedmodule1' },
{ path: 'home2', loadChildren: './lazyloadedmodule2' },
{ path: 'home3', loadChildren: './lazyloadedmodule3' },
{ path: 'basehome', loadChildren: './lazyloadedmodule4' }
Теперь в моем охраннике маршрута я вызываю подписку следующим образом.
canActivate(): Observable<any> | boolean {
return this._myService.getCurrentApp().subscribe(
(r) => {
if(r === 'app1'){
//navigate to app1homepage
} else if (r === 'app2') {
//navigate to app2homepage
} else {
// navigate to base homepage
}
},
(e) => {
console.log(e);
return false;
}
);
}
Так выглядит мой сервис там, где я вызываю API.
public getCurrentApp(): Observable<any> {
return this.http.get(this.apiBaseUrl + 'getApp').pipe(
catchError((err: HttpErrorResponse) => {
return throwError(err.error.errorMessage);
}));
}
Во-первых, охранник маршрута не принимает значение в качестве подписки, потому что я верю, что он ожидает только логическое значение, но я получу ответ в виде строки обратно.Как мне убедиться, что при первой загрузке страницы она вызывает API и перенаправляет ее соответственно?