2017-04-19 59 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

相關問題