auf Antwort vom Server hängt habe ich einen Singleton Service:Angular 2. Garde, die
export class CarService {
public currentCar: BehaviorSubject<Car> = new BehaviorSubject(null);
constructor(private jsonApiService: JsonApiService) {
this.jsonApiService.get(`.../activeCar`);
.subscribe(data => {
if(data) {
this.setActiveCar(data);
}
})
}
}
public setActiveCar(activeCar: Car): void {
this.currentBrokerageAccount.next(activeCar);
}
}
Dann habe ich currentCar
in der Wache verwenden:
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (!this.canActivate()) {
return false;
}
if (!this.carService.currentCar.getValue() && state.url !== '/settings') {
this.router.navigate(['/settings']);
}
return true;
}
die Wache überprüft aktuelles Auto und wenn es Ist es Daten erlaubt dann die Seite zu öffnen, ansonsten wird auf die Einstellungsseite weitergeleitet wo der Benutzer das Auto auswählen muss. Also, das Problem ist, wenn ich Menü in der Anwendung dann alles funktioniert, aber wenn ich Seite beim ersten Mal (oder F5) öffne, dann werde ich immer auf die Einstellungsseite umgeleitet. Ich verstehe den Grund: Es ist, weil carService
hat das aktive Auto von einem Server noch nicht und currentCar
ist null. Wie man es richtig löst?
PS. Der Ablauf ist wie folgt: Nach der Authentifizierung sieht der Benutzer alle Funktionen in der Anwendung, wenn Auto ausgewählt ist. Aber wenn Auto nicht ausgewählt ist, ist nur eine URL verfügbar und es ist die settings
. Also, wenn Auto nicht ausgewählt ist, leite ich den Benutzer auf die Einstellungsseite um.
Die AsyncSubject ist das, was ich brauche. Vielen Dank, – user348173