执行解析器一个在另一个角度2+
问题描述:
给出下面的路线后:执行解析器一个在另一个角度2+
path: '',
component: MyComponent,
resolve: {
foo: FooResolver,
bar: BarResolver
}
有没有告诉角度来执行第一分解FooResolver
的任何方式,只有执行第二解析BarResolver
一旦第一个已完成?
答
解析器并行解析。如果Foo
和Bar
应该是串联解决的,他们应该是一个单独的FooBar
解析器。如果他们都应该由自己在其他途径使用,FooBar
可以包装Foo
和Bar
解析器:
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 };
}
}
FooBar
应该知道的事实,如果它是一个承诺或可观察到的是从Foo
和Bar
返回以便妥善解决它们。否则应增加额外的安全装置,如await Observable.of(this.fooResolver.resolve(route)).toPromise()
。
FooBar
和Foo
或Bar
不应出现在相同的路由中,因为这会导致重复的分辨率。
+0
这个工作,并允许我的代码是可重用的。非常感谢! –
+1
不客气。 – estus
不,不存在 –
无论你想要做什么。有一个更好的办法。 – Carsten
这取决于'foo'和'bar'是什么以及为什么它们应该按照这个顺序来解决。但通常这可以通过FooBarResolver解析为包含foo和bar的对象来实现。 – estus