0

ねえ、

複数のユーザーがいるアプリがあり、ユーザーの詳細を確認したいので、ルートに入る前にそのユーザーを 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 関数だけを返すと、ユーザーオブジェクトが正常に来ます。

4

1 に答える 1

3

次を使用するように変更しswitchMapます。

resolve(route: ActivatedRouteSnapshot): Observable<any>|Promise<any>|any {
  let id = route.params['id'];

  if (!this.usersService.checkIfUsersExist()) {
    return this.usersService.getUsers()
      .switchMap(
           (success) => {
              return this.usersService.getUserById(id); 
           })
      .catch((err) => this.router.navigate([ 'login ']));
 } else {
   return this.usersService.getUserById(id); 
 }
} 
于 2016-10-20T08:42:43.720 に答える