私はangle2 appを構築していますが、現在はメインコンテンツのメニューバーとルータコンセントを備えたホームコンポーネントがあります。私はログインメカニズムを追加しました。そのため、ユーザーが認証されていない場合、ログインページが画面全体に表示され、ログイン後、上記の構造を持つメイン/ホームコンポーネントにルーティングされます。ログイン後のルーティングの問題
私はアプリケーションを実行するとログインページが読み込まれ、正常に認証されると私はホームページにルーティングされますが、メニューがロードされるホームページ(Dashboard1、Dashboard2、Report1など)ではリンク正しく動作していません。いずれかのメニューバーのリンクをクリックすると、以下のエラーが表示されます。
lib/@angular/platform-browser/bundles/platform-browser.umd.js:1900 Error: Uncaught (in promise): Error: Cannot match any routes: 'Report1'
at resolvePromise (zone.js:538)
at zone.js:515
at ZoneDelegate.invoke (zone.js:323)
at Object.onInvoke (lib/@angular/core/bundles/core.umd.js:9100)
at ZoneDelegate.invoke (zone.js:322)
at Zone.run (zone.js:216)
at zone.js:571
at ZoneDelegate.invokeTask (zone.js:356)
at Object.onInvokeTask (lib/@angular/core/bundles/core.umd.js:9091)
at ZoneDelegate.invokeTask (zone.js:355)
Iは、2ヶ所のルータ出口タグはAppLoaderをで、また実際メニューがロードされており、それがロードするルータ出口を含んLayoutMenu成分1、すなわち有しますそこのメインコンテンツです。
ルーターアウトレットを設置する正しい場所は何ですか?どこで私は間違いをしていますか?
次のブートストラップmain.tsを介して注入され
export const routes: RouterConfig = [
{ path: '', component: Login },
{ path: 'login', component: Login },
{ path: 'Home', component: Home },
{ path: '**', component: Login }
];
export const LOGIN_ROUTER_PROVIDERS = [
provideRouter(routes)
];
ホーム/メニューrouteconfigが
export const routes: RouterConfig = [
{
path: 'home',
component: Home,
// canActivate: [AuthenticationGuard],
children: [
{ path: 'Dashboard1', component: Dashboard1 },
{ path: 'Dashboard2', component: Dashboard2 },
{ path: 'Report1', component: Report1 },
{ path: 'Report2', component: Report1 },
{
path: 'ManageRedisCache',
component: ManageRedisCache,
children: [
{ path: '', component: ExtractorQueue },
{ path: 'Extractor', component: Extractor },
{ path: 'Schedule', component: Schedule },
{ path: 'CacheVisualization', component: CacheVisualization }
]
}
]
}
];
export const HOME_ROUTER_PROVIDERS = [
provideRouter(routes)
];
上記2 routeconfig以下の通りであるrouteconfigするためのコードです。 main.tsのブートストラップでは、私もAppLoaderを注入します。
AppLoaderコンポーネントは、ログインページを含む/ロードする以下のとおりです。
@Component({
selector: 'my-app',
template: `<router-outlet></router-outlet>`,
directives: [Login, ROUTER_DIRECTIVES ]
})
export class AppLoader {
}
LayoutMenuコンポーネントは以下の通りです:
import { Component } from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';
@Component({
selector: 'MenuLayout',
template: `
<a [routerLink]="['/Dashboard1']"><h4>Dashboards 1</h4></a>
<a [routerLink]="['/Dashboard2']"><h4>Dashboards 2</h4></a>
<a [routerLink]="['/Report1']"><h4>Reports 1</h4></a>
<div class="outer-outlet">
<router-outlet></router-outlet>
</div> `,
directives: [LeftMenu, ROUTER_DIRECTIVES]
})
export class LayoutMenu { }
私は提案通りにrouteconfigを更新しましたが、いくつかの新しいエラーに直面しています。どこに問題があるのかを教えてください。私はまだAuthenticationGuardを実装するには、最初に基本的なルーティング機能を実装して、AuthenticationGuardで作業したいと思っています。 – Krishnan
@Krishnan 'ExtractorQueue'はミスした' pathMatch'プロパティを持っているようです。答えへのサンプルプロジェクトリンクを追加しました。 – leovrf
優秀な回答、私は成功した私のプロジェクトに適用 –