6

angular2 を使用して単一ページ アプリケーションを構築していますが、アプリのルーティングに応じて別のアプリケーション テンプレートをレンダリングする必要があります。最上位レベルでは、メイン アプリケーション テンプレートとアプリの管理テンプレートを切り替えることができる必要があります。

ルーティング ルール:

  • URL パスが /auth で始まる場合、AuthApp によって処理されます。
  • それ以外で始まる場合は、MainApp で処理する必要があります

実装:

これを実現するために、このように AuthApp または MainApp のいずれかに責任を委譲する最高レベルのコンポーネント アプリを用意しました。

@RouteConfig([
  {
    path: '/auth/...',
    component: AuthApp,
    as: 'Auth'
  },
  {
    path: '/...',
    component: MainApp,
    as: 'Main'
  }
])

次に、各サブアプリ (AuthApp、MainApp など) には、このような独自のルート定義があります。

@RouteConfig([
  { path: '/current-vacancies', CurrentVacancies, as: 'CurrentVacancies', useAsDefault: true },
  { path: '/candidates/create', CandidateCreate, as: 'CandidateCreate'},
  ...
])

機能的にもデザインの観点からも、これは素晴らしい作品です!

問題:

アプリケーションのルート構成でパスが指定されていないメイン アプリ (例: /...=> MainApp) では、ネストされた URL パスは必要ありません。たとえば、アプリ (routerLink) を介して CurrentVacancys に移動すると、URL が更新され、余分な不要なスラッシュが付加されます。URL パスは、読み取り.../#//current-vacanciesたいときに次のようになります.../#/current-vacancies

アドレスバーに入力すると、アプリケーションルーティングが実際に機能し.../#/current-vacancies、正しく遷移します。しかし、アプリケーションの routerLink ディレクティブを介してナビゲートすると、不要なスラッシュが追加されます。

これが起こっている理由を論理的に理解しています.MainAppに委譲するルートコンポーネントには「/」のパスがあり、子コンポーネントと連結されて完全なURLパスを形成します. ただし、この場合、スラッシュを追加することは望ましくありません。どうすればそれを削除できるか、または何らかの形でこの動作をオーバーライドできるかについてのアイデア。

ところで、MainApp コンポーネント ルーティングを最上位に移動することを検討しました。これにより、私が報告している URL パスの問題は解決されますが、最上位でテンプレートを切り替えることはできません。

要約すれば

どちらかで私を助けてください

  • /メインアプリルートで不要なものを削除する方法"preferred option"、または
  • ネストされたコンポーネント ルーティングを使用して切り替え可能な最上位テンプレートをアプリに設計する方法。

ありがとう

4

1 に答える 1