在Angular 2+中一个接一个地执行解析器

Iva*_*lar 11 angular2-routing angular

鉴于以下路线:

path: '',
component: MyComponent,
resolve: {
    foo: FooResolver,
    bar: BarResolver
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉angular执行第一个解析器FooResolver,只有BarResolver在第一个解析器完成后才执行第二个解析器?

Est*_*ask 20

解析器并行解析.如果Foo并且Bar应该按顺序解决它们应该是单个FooBar解析器.如果它们应该在其他路径中自己使用,FooBar可以换行FooBar解析:

class FooBarResolver implements Resolve<{ foo: any, bar: any }> {
  constructor(
    protected fooResolver: FooResolver,
    protected barResolver: BarResolver
  ) {}

  async resolve(route): Promise<{ foo: any, bar: any }> {
    const foo = await this.fooResolver.resolve(route);
    const bar = await this.barResolver.resolve(route);

    return { foo, bar };
  }
}
Run Code Online (Sandbox Code Playgroud)

FooBar应该知道这是一个事实,如果它是一个承诺或一个可观察的回报,FooBar为了妥善解决它们.否则应添加额外的安全装置,如await Observable.from(this.fooResolver.resolve(route)).toPromise().

FooBar和/ FooBar不应出现在同一路线内,因为这会导致重复的分辨率.

  • @DanyGauthier与任何其他解析器一样,它在路由上被指定为`resolve:{fooBar:FooBarResolver}`,并且解析数据在路由组件中可用作`activatedRoute.data ['fooBar'].foo`等. (2认同)