【问题标题】:Angular2 route resolve multiple actionsAngular2路由解析多个动作
【发布时间】:2016-10-20 08:34:42
【问题描述】:

嘿,

我有一个应用程序,我们有多个用户,我想查看用户详细信息,因此我需要在输入路线之前通过 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】:

    改为使用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); 
     }
    } 
    

    【讨论】:

    • 像魅力一样工作。谢谢你,我一直只使用订阅。
    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 2017-07-24
    • 2017-04-22
    • 1970-01-01
    • 2020-08-13
    • 2017-04-17
    • 1970-01-01
    • 2017-04-29
    相关资源
    最近更新 更多