Angular Router Resolve问题 - 数据未定义

时间:2018-03-21 14:41:41

标签: angular typescript angular5 angular-routing rxjs5

我在我的应用程序中有一条路线,我已经附加了一个解析器,以便在访问路径之前我有页面所需的数据。最近几天我一直在将应用程序从Angular 4更新到Angular 5,作为更新的一部分,我还要更改代码以使用HttpClientModule而不是弃用{{1} }和HttpModule 5.5.6。

由于某种原因,解析器现在总是返回undefined作为数据。这是我的解析器示例:

rxjs

以上是我在解析器中的示例。在路由加载之前,我需要来自多个服务调用的数据,因此我使用@Injectable() export class GameLoaderResolver implements Resolve<any> { constructor( private router: Router, private service1: Service1, private service2: Service2 ) { } resolve(): Observable<any> { let observable1 = this.service1.get('http://localhost:1234/api/Users/getData'); let observable2 = this.service2.get('http://localhost:1234/api/Countries/getData'); return forkJoin(observable1, observable2); } } 将它们合并为一个forkJoin。上面的代码会发生什么,返回一个带有每个observable元素的数组。因此,在这种情况下,返回包含两个元素的数组,索引Observable的数据为0,索引observable1的数据为1。在我更改为使用observable2HttpClient 5.5.6后,我获得了一个数组rxjs

这在以前使用[ undefined, undefined ]时起作用了,我做了我的研究,除非我错过了,否则我找不到路由器解析器的任何更改,所以我不确定是否有&#39 ;上面的代码有什么问题。

环境影响:

  • Angular: 5.2.8
  • RXJS: 5.5.6

更新

我设法通过在每个observable和HttpModule上使用map来解决问题,这样就会返回结果。因此更新的代码必须如下所示:

forkJoin

我猜测,因为在使用@Injectable() export class GameLoaderResolver implements Resolve<any> { constructor( private router: Router, private service1: Service1, private service2: Service2 ) { } resolve(): Observable<any> { let observable1 = this.service1.get('http://localhost:1234/api/Users/getData') .map(res => return res); let observable2 = this.service2.get('http://localhost:1234/api/Countries/getData') .map(res => return res); return forkJoin(observable1, observable2) .map(res => return res); } } 之前我们必须实现一个从响应中提取数据的函数,所以返回了数据。现在有了最新的更新,我猜测这必须通过&#34;额外的步骤&#34;。

0 个答案:

没有答案