2017-04-19 56 views
2

我有一个组件,为此我写了一个解析器。Angular2 - 如何有一个路由多个Resolvers(一个接一个)

这里就是我想在解析器做 -

  1. 首先获得所有活跃的国家。
  2. 然后获取其中一个国家的州(我将拥有所选国家的ID)。

在我写的RESTful API的服务器 - 用于获取国家的网址 - http://localhost:3000/api/v1/country/search?query={%22isActive%22:true}

为获得一个国家的状态的网址 - http://localhost:3000/api/v1/country/1/state/search?query={%22isActive%22:true}

以下是我有为其编写解析器 -

general-settings-resolver.service.ts

@Injectable() 
export class GeneralSettingsResolverService implements Resolve<any> { 
constructor(private service: GeneralSettingsService) { } 
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> { 
    return this.service.getAllActiveCountries().then(countries => { 
     this.service.getActiveStatesOfCountry(7).then(states => { 
      return { 
       everything: { 
        countries: countries, 
        states: states 
       } 
      } 
     }) 
    }); 
} 

}

一般settings.component.ts

this.route.data.subscribe((data : {everything: any}) => { 
     console.log(data) //<---- Here data.everything is printed as undefined. 

    }) 

一般设置 - routing.module.ts

let generalSettingsRoutes: Routes = [ 
{ 
    path: '', 
    component: GeneralSettingsComponent, 
    data: { 
     pageTitle: 'Organization Settings' 
    }, 
    resolve: { 
     everything: GeneralSettingsResolverService, 
    } 
}]; 

我知道我可以做这使用多个resolve s。但是,我可以用一个单一的方法来做到这一点,我可以一个接一个地获取数据。

回答

0

我对路线解析程序了解不多,但我认为您在general-settings-resolver.service.ts中缺少return声明。它可能应该是这样的:

return this.service.getActiveStatesOfCountry(7).then(...) 

或者只是从该呼叫周围移除大括号。否则,你的“所有东西”对象就会陷入空虚:-)

+0

太近了,但迄今为止!谢谢。 – mridula

相关问题