Angular 8解析器-如何从一个解析器获得数据作为另一个解析器的输入



我有2个REST API。需要来自API的数据。同时,第二API将API 1的输入作为参数。

GET api/one-->{id:3},GET中需要此响应idapi/2?inputFromApiOne=3-->{name:"SS"}

我在组件中可用的最终响应应该是-

{
"id": 3, -- from API One
"name": "SS" -- from API Two
}

我使用了一个解析器从API One获取数据,但无法将其用作第二个解析器的输入。

我还尝试从resolve1中的两个API获取数据。我使用了flatMap,但我最终只使用了来自第二API的数据。

resolve(route: ActivatedRouteSnapshot) {
return this.myService.getDataFromApiOne(route.params.id).pipe(flatMap(data => {
return this.myService.getDataFromApiTwo(data.someKey.id);
}));
}

我希望您已经在路由配置中指定了两个解析器,如

{
path: '', 
component: MyComponent,
resolve: {
fromResolverOne: Resolver1
fromResolverTwo: Resolver2
}
}

然后在你的组件

const resolverOneData = this.route.snapshot.data['fromResolverOne'];
const resolverTwoData = this.route.snapshot.data['fromResolverTwo'];

我只能通过等待异步来实现这一点。

@Injectable()
export class MyResolverService implements Resolve<any> {
constructor(private myService: MyService) { }
async resolve(route: ActivatedRouteSnapshot) {
const dataFromApiOne = await 
this.myService.getMediumDetails(route.params.id).toPromise();
const dataFromApiTwo = await this.myService.getPageConfig(dataFromApiOne.id).toPromise();
return { dataFromApiOne, dataFromApiTwo };
}
}

然后在我的组件中,我只是从路由快照中获取数据。

this.dataFromBothApi = this.route.snapshot.data.myData

相关内容

最新更新