2016-10-20 9 views
0

ヘイ、私たちは複数のユーザーを持っていると私はルートに入る前に、IDによって、そのユーザーを解決する必要があるので、ユーザの詳細を確認したいアプリを抱えているAngular2ルート決意複数のアクション

。すべてのユーザーをフェッチするユーザーコンポーネントに自分自身を着陸させると、私はそれを行うとすべていいです。しかし、リロードの場合、ルートはidでユーザーを解決しようとします。ユーザーはまだ存在しないため(まだフェッチされていません)、失敗します。私は、ユーザーが存在するかどうかを確認し、それらを取得して、ユーザーとのルートを解決したいと思います。ここでは、コードです:コンポーネント

this.route.data.subscribe(
    (res) => { 
    this.user= res['user']; 
    } 
); 

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.usersService.getUserById関数のみを返すと、ユーザーオブジェクトが正常に取得されます。 switchMapを使用する

答えて

2

変更して:魔法のように

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); 
} 
} 
+0

作品。ありがとう、私はいつも購読だけを使用しました。 – Prototype

関連する問題