2017-10-17 37 views
3

给出下面的路线后:执行解析器一个在另一个角度2+

path: '', 
component: MyComponent, 
resolve: { 
    foo: FooResolver, 
    bar: BarResolver 
} 

有没有告诉角度来执行第一分解FooResolver的任何方式,只有执行第二解析BarResolver一旦第一个已完成?

+0

不,不存在 –

+0

无论你想要做什么。有一个更好的办法。 – Carsten

+0

这取决于'foo'和'bar'是什么以及为什么它们应该按照这个顺序来解决。但通常这可以通过FooBarResolver解析为包含foo和bar的对象来实现。 – estus

回答

5

解析器并行解析。如果FooBar应该是串联解决的,他们应该是一个单独的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 }; 
    } 
} 

FooBar应该知道的事实,如果它是一个承诺或可观察到的是从FooBar返回以便妥善解决它们。否则应增加额外的安全装置,如await Observable.of(this.fooResolver.resolve(route)).toPromise()

FooBarFooBar不应出现在相同的路由中,因为这会导致重复的分辨率。

+0

这个工作,并允许我的代码是可重用的。非常感谢! –

+1

不客气。 – estus

相关问题