【问题标题】:Access route parameters without promise Angular 6在没有承诺的情况下访问路由参数Angular 6
【发布时间】:2018-11-28 18:29:42
【问题描述】:

我正在使用 Angular 6。当我想使用路由参数时,我使用以下代码:

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' 的函数必须返回 一个值。

如何在解析函数内部返回服务结果,将路由参数传递给我调用的服务并将其返回给组件?

【问题讨论】:

    标签: angular service observable resolver


    【解决方案1】:

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

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

    直到参数被解析后才会进行服务调用,然后订阅者将收到服务调用的结果。

    感谢@JBNizet 的更正。

    【讨论】:

    • 如果 this.FixturesService.getFixtures() 返回一个 Observable,它实际上应该是 switchMap(),而不是 map()。而且,@Sami,不要使用any。使用服务返回的正确数据类型。
    • 我试过 map 和 switchMap 但没有用。相同的错误:vendor.js:32791 错误错误:未捕获(在承诺中):TypeError:route.params.switchMap 不是函数 TypeError:route.params.switchMap 不是函数
    • @JBNizet 我应该为对象使用什么类型?
    • 您可能需要为 switchMap 导入运算符,但这可能在 Angular 6 中发生了变化,我不知道什么是合适的方法。
    • 其实这里的路由是ActivatedRouteSnapshot类型,不是ActivatedRoute。所以参数可以直接访问。 return this.FixturesService.getFixtures(route.params)angular.io/api/router/ActivatedRouteSnapshot#params
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多