2017-11-17 2 views
0

Zur Zeit habe ich sehr einfach beheben:(ngrx/store) Wie kann ich den aktuellen Status ohne Abonnement erhalten, für die Verwendung in einer Route Resolve?

export class UserResolve implements Resolve<any>{ 

constructor(private userService: UserService){} 

    resolve(route: ActivatedRouteSnapshot){ 
     return this.userService.get(route.params.id); 
    } 
} 

In der Komponente wird der Benutzer dann in den Laden geladen. Was ich gerne wissen würde, ist, wie man diesen Benutzer erhält, ohne das Observable abonnieren zu müssen, das von der select-Funktion zurückgegeben wird. Der Grund dafür ist, dass ich, wenn ich wieder zur selben URL navigiere, anstatt eine andere Anfrage zu senden, um die Benutzerinformationen zu erhalten, den Benutzer lieber einfach aus dem Laden zurückgeben würde.

Grundsätzlich, so etwas wie das ist, was ich im Sinne habe:

this.store.select(state => state.user) 
     .take(1) 
     .subscribe(user => 
      user.id == +route.paramMap.get('id') ? user : this.userService.get(route.params.id)) 

Aber ich weiß, dass dies nicht getan werden kann, wie man nichts in der abonnieren Funktion zurückkehren kann. Ist es aber auch anders möglich?

Ich weiß, das könnte etwas in der Komponente erreicht werden, aber ich brauche es in der Lösung, bevor die Komponente initialisiert wird.

Ich verwende Angular 5 und NGRX/Speicher 4

+0

Sie können Routenwächter verwenden (https://angular.io/guide/router#milestone-5 -route-Wächter) und überprüfen, ob der Benutzer im Geschäft ist. Wenn nicht, rufen Sie die API ab. In der Komponente, immer aus dem Laden. Dies ist eine gängige Lösung/Muster in Angulars App mit ngrx/store. –

+0

Soweit ich weiß, werden Routenwächter verwendet, um zu behandeln, ob ein Benutzer zu einer Route navigieren darf oder nicht. Ich sehe nicht, wie das mein Problem löst. Können Sie mir ein Beispiel mit Code geben? – Christian

+0

Die häufigste Verwendung von Routenwächtern ist, dass Sie erwähnt haben, aber Sie können alles in einem Wächter tun, wenn Sie etwas tun müssen, bevor eine Route "geroutet" wird. Werfen Sie einen Blick auf diesen Beitrag: https://toddmotto.com/prelongting-ngrx-store-route-guards Der Benutzer checkt den Guard innerhalb von canActivate ein, wenn der Benutzer im Store existiert oder nicht. –

Antwort

0

Die häufigste Verwendung von Route Wachen ist, dass Sie erwähnt, aber man kann in einer Wache nichts tun, wenn Sie tun müssen, ‚etwas‘, bevor ein Route wird "geroutet". Sehen Sie sich this post an: Der Benutzer checkt den Wächter ein, innerhalb des canActivate, wenn der Benutzer im Laden existiert oder nicht

Verwandte Themen