2017-01-09 5 views
9

の複数の解決resolveパラメータのリゾルバパターンを実装します。したがって、このような何か:Angular2ルータおよびUI-ルータには1つのルート

import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; 
import { Injectable } from '@angular/core'; 
import { DashboardService } from '.'; 

@Injectable() 
export class DashboardResolver implements Resolve<any> { 

    constructor(private dashboardService: DashboardService) { } 

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    return this.dashboardService.get(); 
    } 

} 

その後、私のルートに私のようなものを実行します。

import { DashboardComponent } from './dashboard.component'; 
import { DashboardResolver } from './dashboard.resolver'; 

export const routes = [ 
    { 
    path: '', 
    children: [ 
     { 
     path: '', 
     component: DashboardComponent, 
     resolve: { 
      data: DashboardResolver 
     } 
     } 
    ] 
    } 
]; 

問題は、唯一の解決があります。 ui-router実装のように複数の解決引数を実装するにはどうすればよいですか?

2つのオプションがあるとします。これらの入力のそれぞれに対してリゾルバを実装するか、解決がすべての解決がネストされたオブジェクトを返すようにします。最初はかなり儀式的に見え、2番目の音はかなりハッキリと聞こえるので、より良い方法が必要です。

+0

あなたはangular2 BTWでUIRouterを進めることができます:)、そうしています。 –

+2

はい、私は知っています。私はちょうど実験している; P – amcdnl

+0

@ amcdnl。これで助けが必要ですか? – AngularChef

答えて

17

申し訳ありませんが、私は質問を誤解していないことを願っています。

Angularのルーターは、ルートごとに必要な数のリゾルバーをサポートします。ルート宣言で

resolveプロパティがオブジェクトであり、あなたが好きなことはできるだけ多くのキーを持つことができます。

{ 
    path: '', 
    component: DashboardComponent, 
    resolve: { 
    foo: Resolver1 
    bar: Resolver2, 
    // more resolves here... 
    } 
} 

次に、あなたのコンポーネントから解決のデータを取得:

@Component({ ... }) 
export class MyComponent { 

    constructor(private route: ActivatedRoute) { } 

    ngOnInit() { 
    const foo = this.route.snapshot.data['foo']; 
    const bar = this.route.snapshot.data['bar']; 
    } 

} 

すべての解決が完了/完了するまで、ルートはアクティブ化されません。

+0

これは確かに知ることは良いですが、私はそれが彼の全体の質問にかなり答えるとは思わない。私たちは、ルートに必要な解決策ごとにx個の注入可能なリゾルバクラスを作成する必要がありますか、またはルートがアクティブ化される前に複数のサービスコールを行う単一のリゾルバを作成するにはどうしたらいいですか? – Marcidius

+0

これはデザインの選択であり、それはあなた次第です。 1つの大規模なリゾルバは、再利用可能性が低くなります。あなたのリゾルバがある特定のルートに縛られていない限り、複数のニブルリゾルバを構成する方が良い方法だと思います。 – AngularChef

+1

こんにちは、いくつかのネストされたオブジェクトで1つのルートオブジェクトを取得することは可能ですか?私は入れ子オブジェクトの代わりに多くのリゾルバで1つのオブジェクトを取得したいと思います。 – tylkonachwile

関連する問題