使用Angular解析器获取异步数据

时间:2019-08-02 20:19:37

标签: angular rxjs

我的Angular 8应用中有解析器

import "github.com/my/mod/v2/mypkg"

但这是将export class UserResolver implements Resolve<any> { constructor( private authService: AuthService, ) { } resolve() { this.authService.user.subscribe(user => { return user }) } } 分配给路由器数据,因为null在我的服务中带有异步功能(来自主题)。如何让解析程序等待服务中的数据返回,而不为数据分配空值?

1 个答案:

答案 0 :(得分:0)

两件事:

1)删除subscribe,然后让解析器处理订阅。

2)返回Observable,而不是数据。

类似这样的东西:

export class UserResolver implements Resolve<any> {

  constructor(
    private authService: AuthService,
  ) { }

  resolve() {
    return this.authService.user;
  }
}

更新:

矿井开始工作,等待然后返回数据。我的看起来像这样:

constructor(private productService: ProductService) { }

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IProduct> {
        const id = +route.paramMap.get('id');
        return this.productService.getProduct(id);
    }

请注意,没有订阅,我正在返回http get操作返回的Observable。

我的路由配置如下:

@NgModule({
  imports: [
    SharedModule,
    InMemoryWebApiModule.forRoot(ProductData),
    RouterModule.forChild([
      { path: 'products', component: ProductListComponent },
      {
        path: 'products/:id',
        component: ProductDetailComponent,
        resolve: { resolvedData: ProductResolver }
      },
      {
        path: 'products/:id/edit',
        component: ProductEditComponent,
        resolve: { resolvedData: ProductResolver }
      }
    ])

如果您要使用有效的代码,请在此处提供上述版本的更复杂版本(由于添加了异常处理,因此更复杂):https://github.com/DeborahK/Angular-Routing/tree/master/APM-Final