ねえ、
複数のユーザーがいるアプリがあり、ユーザーの詳細を確認したいので、ルートに入る前にそのユーザーを ID で解決する必要があります。すべてのユーザーを取得するユーザーコンポーネントに最初に到達すると、すべてがうまくいきます。ただし、リロードの場合、ルートは ID でユーザーを解決しようとしますが、まだユーザーがいないため失敗します (ユーザーはまだ取得されていません)。ユーザーが存在するかどうかを確認し、それらをフェッチしてから、ユーザーでルートを解決したいと思います。コードは次のとおりです。
resolve(route: ActivatedRouteSnapshot): Observable<any>|Promise<any>|any {
let id = route.params['id'];
if (!this.usersService.checkIfUsersExist()) {
return this.usersService.getUsers().subscribe(
(success) => {
return this.usersService.getUserById(id);
},
(error) => {
this.router.navigate([ 'login ']);
}
);
} else {
return this.usersService.getUserById(id);
}
}
そして、コンポーネントで
this.route.data.subscribe(
(res) => {
this.user= res['user'];
}
);
ルート データをリッスンするときに得られるのは、user: Subscriber のオブジェクトだけです。this.usersService.getUserById 関数だけを返すと、ユーザーオブジェクトが正常に来ます。