Angular2路线解决了多个动作

问题描述 投票:0回答:1

我有一个拥有多个用户的应用,我想查看用户详细信息,因此在输入路线之前,我需要按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'];
  }
); 

当我侦听路由数据时,得到的只是用户:订户的对象。 当我仅返回this.usersService.getUserById函数时,用户对象正常出现。

angular rxjs angular2-routing angular2-observables
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); 
 }
} 
© www.soinside.com 2019 - 2024. All rights reserved.