无承诺访问路由参数Angular 6

时间:2018-06-19 17:56:40

标签: angular service observable resolver

我正在使用Angular6。当我想使用路径参数时,我使用以下代码:

this.route.params.subscribe(params => {
    // use params now as a object variable
});

但是我需要在服务调用中使用参数。示例我有一个获取用户信息的服务。我将此服务称为解析器内部。如果要使用订阅,则无法返回服务结果:

resolve(route: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<any> {
    this.route.params.subscribe(params => {
        return this.FixturesService.getFixtures(params);
    });    
});

现在不起作用。它说:

  

其声明类型既不是“ void”也不是“ any”的函数必须返回   一个值。

如何在resolve函数中通过将路由参数传递给我调用的服务并将其返回给组件的方式返回服务结果?

1 个答案:

答案 0 :(得分:1)

您可以通过使用switchMap将可观察到的路线参数更改为可观察到的服务来解决此问题:

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {
  return route.params.switchMap(params => this.FixturesService.getFixtures(params));
}

在解决参数之前,不会进行服务呼叫,然后订阅者将收到服务呼叫的结果。

感谢@JBNizet进行更正。