首页 > 解决方案 > 如何在角度组件之前捕获已解析的数据?

问题描述

我正在订阅一个无法更改的 http 方法。但是,我需要在解析中调用此方法,对其进行转换,然后在组件中访问它。

但是,由于解析返回“可观察”,我不在哪里捕获数据并返回“更改”的数据。

例如 this.activatedRoute.snapshot.data['data'] - 这就是组件现在访问数据的方式。但我想在“数据”到达组件之前对其进行转换。

问题是 :

我知道运营商以及如何转换,我问我应该在哪里做?我无法在 resolve 函数中执行此操作,因为它返回 observable 本身,并且我无法在返回 observable 的 http 方法中执行此操作,因为我无法更改它。我正在寻找可以捕获它的管道中的一些钩子。

标签: angulartypescript

解决方案


如果要转换数据,可以使用 routeStateSerializer 之类的东西,并在路由更改时直接存储路由参数或数据。为此,请查看ngrx/router-statengrx/router。但是我建议您使用以下方法并在可观察流到达您的组件时访问数据。如果您的注射剂中的 http 函数ApiService如下所示:

httpFunction: Observable<YourDataType> () {
  return this.http.get<YourDataType>(`yourApi`);
}

您可以像这样使用 RxJS 6 访问组件中的可观察数据

// this.apiService.
httpFunction().pipe(
  map((data: YourDataType) => {
    // Do something with your data here
    // and don't forget to return it
  })
);

在 RxJS 5 或之前使用不带管道的 map 函数。


推荐阅读