我在我的应用程序中有一条路线,我已经附加了一个解析器,以便在访问路径之前我有页面所需的数据。最近几天我一直在将应用程序从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
。在我更改为使用observable2
和HttpClient
5.5.6后,我获得了一个数组rxjs
。
这在以前使用[ undefined, undefined ]
时起作用了,我做了我的研究,除非我错过了,否则我找不到路由器解析器的任何更改,所以我不确定是否有&#39 ;上面的代码有什么问题。
环境影响:
更新
我设法通过在每个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;。