Angular2 - 如何为一条路线设置多个解析器(一个接一个)
Angular2 - How to have multiple Resolvers (one after the other) for a route
我有一个组件,为此我编写了解析器。
这是我想在解析器中执行的操作 -
- 首先获取所有活跃的国家。
- 然后获取其中一个国家的州(我将获得所选国家的 ID)。
我在服务器上编写了 RESTful API -
获取国家的 URL 是 - http://localhost:3000/api/v1/country/search?query={%22isActive%22:true}
获取一个国家/地区的州的 URL 是 -
http://localhost:3000/api/v1/country/1/state/search?query={%22isActive%22:true}
这是我为它编写解析器的方式 -
常规设置-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
来做到这一点。但是我可以使用一个接一个地获取数据来做到这一点吗?
我不太了解路由解析器,但我认为您在 general-settings-resolver.service.ts
中缺少 return
语句。大概应该是这样的:
return this.service.getActiveStatesOfCountry(7).then(...)
或者只删除该调用周围的大括号。否则你的 "everything" 对象会在一片空白中丢失 :-)
我有一个组件,为此我编写了解析器。
这是我想在解析器中执行的操作 -
- 首先获取所有活跃的国家。
- 然后获取其中一个国家的州(我将获得所选国家的 ID)。
我在服务器上编写了 RESTful API -
获取国家的 URL 是 - http://localhost:3000/api/v1/country/search?query={%22isActive%22:true}
获取一个国家/地区的州的 URL 是 -
http://localhost:3000/api/v1/country/1/state/search?query={%22isActive%22:true}
这是我为它编写解析器的方式 -
常规设置-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
来做到这一点。但是我可以使用一个接一个地获取数据来做到这一点吗?
我不太了解路由解析器,但我认为您在 general-settings-resolver.service.ts
中缺少 return
语句。大概应该是这样的:
return this.service.getActiveStatesOfCountry(7).then(...)
或者只删除该调用周围的大括号。否则你的 "everything" 对象会在一片空白中丢失 :-)