2016-12-05 3 views
5

私のアプリケーションは角度2(角度cli)といくつかのCMSに基づいています。ページの一部がCMSからダウンロードされ、角度2のページに表示されます。主な問題は、ヘッダーとフッターがCMSからのものであることです。 グローバルリゾルバを追加する方法(グローバルは非常に重要ですが、アプリケーション内のすべてのルートパスにリゾルバを追加したくありません)、CMSがヘッダーとフッターを返すまで待つ角度を強制します。私はすでに正常ルートインタフェースすべてのビューの角度2レゾルバー

export class InboxResolver implements Resolve<MessageListItem[]> 

を実装することによって、いくつかのルート上のいくつかのデータを待つようにリゾルバを使用していると私はいくつかのカスタムルートでそれを使用しています:

const MessagesRoutes: Routes = [ 
{ 
    path: 'inbox', 
    component: InboxComponent, 
    resolve: { messages: InboxResolver } 
} 
]; 

をしかし、どのように一つのグローバルHeaderAndFooterResolverを定義します一箇所?

+0

私が知る限り、あなたが求めていることは実行できません。 1つの解決策は、データがすでにロードされているかどうかをチェックする関数をリゾルバに追加することです。これは少なくとも重複呼び出しを防ぎますが、引き続きすべてのルートにリゾルバが必要です。 – VSO

答えて

7

わからない何あなたの質問は、についてですが、あなたはリゾルバとcomponentless親ルートを使用し、そのすべての子ルート

const MessagesRoutes: Routes = [ 
    { path: '', resolve: { messages: InboxResolver }, children: [ 
     { path: 'inbox', component: InboxComponent}, 
     { path: 'xxx', component: XxxComponent}, 
     { path: 'zzz', component: XxxComponent}, 
    ]} 
]; 
+0

うん、私は言ったような何かをしようとしています。しかし、親ルートには、CMSからヘッダーとフッターをフェッチするTemplateResolver(別名inboxResolver)を使用しているapp.template.componentコンポーネントが含まれています。要約すると、idea atmはアプリの親ルートを作成するため、他のすべてのルートはその子でなければなりません。したがって、この解決者はすべてのルートがアプリケーションテンプレートルートの子ルートであるため、アプリケーションのすべてのルートのリゾルバになります。 – user2771738

+0

はい、すべてのルートはこのルートの子ルートである必要があります。 –

+0

汚れているようですが、私はよりよい解決策を持っていません。たぶん、ルータ以外のガードソリューションのいくつかの並べ替え? – VSO

1

あなたは基本的に各componentに1つresolver必要と宣言する必要があるとこれを共有することができます各ルートごとに1回ずつ、親>子供でない限り、次のようにリゾルバを共有することができます。

const MessagesRoutes: Routes = [ 
    { path: '', resolve: { messages: EmailResolver }, children: [ 
    { path: 'inbox', component: InboxComponent }, 
    { path: 'outbox', component: OutboxComponent }, 
    { path: 'sent', component: SentComponent }, 
    { path: 'received', component: ReceivedComponent } 
    ]} 
]; 
関連する問題