別のルーターアウトレット内に1つのルーターアウトレットがある1つのプロジェクトを作成しようとしています。
次のように機能します。
最初のルーターアウトレットには、2つのビューがあります。
authコンポーネント(/ login)
管理コンポーネント(/ admin)
次に、2番目のアウトレットで、これらをレンダリングする独自のルートを持つadminコンポーネント内にあります。
ダッシュボード(/ admin)
プロファイル(/ admin/profile)
ユーザー(/ admin/users)
ここで、Angular 2のドキュメントでは、モジュールを使用してこの実装を行っていることがわかります。しかし、複数のモジュールを使用する必要はありません(または必要ですか?)。
モジュールを分離せずにこの実装を行う方法はありますか?
管理領域のデフォルトコンポーネントが必要なため、たとえば2番目のルーターアウトレットが必要でした。たとえば、ダッシュボードにはHeaderComponent、LeftNavComponent、およびDashboardCompoentがあります。ただし、プロファイルページにはこれらすべてのHeaderComponentとLeftNavComponentもあり、変更されるのはProfileComponentのみであるため、基本的に同じ構造になります。さまざまな管理ページごとにすべてのインポートを繰り返す必要はないと思います。現在のルートに基づいた動的なコンテンツを持つメイン管理コンポーネントを1つだけ用意したかったのです。
私はすでに多くのことをインターネットで試し、検索しましたが、見つけることができる唯一の例は公式のAngular 2ドキュメントからです。しかし、彼らはこれを複数のモジュールで実装しています。
モジュールをお勧めしますが、ルートナビゲーションではオプションです。
モジュールなしで以下のようなルーティングを設定できます。
app.routing
import { Routes, RouterModule } from '@angular/router';
import { DashboardComponent,
AdminComponent,
ProfileComponent,
UsersComponent
} from './app.component';
const appRoutes: Routes = [
{
path: '',
redirectTo: '/dashboard/admin/users',
pathMatch: 'full'
},
{
path: 'dashboard',
component: DashboardComponent,
children:[
{
path : 'admin',
component: AdminComponent,
children:[
{
path : 'users',
component: UsersComponent
},
{
path : 'profile',
component: ProfileComponent
}
]
}
]
}
];
export const routing = RouterModule.forRoot(appRoutes);
コンポーネント
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<h3 class="title">Routing Deep dive</h3>
<hr />
<router-outlet></router-outlet>
`
})
export class AppComponent {
}
@Component({
template: `
<h3 class="title">Dashboard</h3>
<nav>
</nav>
<hr />
<router-outlet></router-outlet>
`
})
export class DashboardComponent {
}
@Component({
template: `
<h3 class="title">Admin</h3>
<nav>
<a routerLink="users" routerLinkActive="active" >Users</a>
<a routerLink="profile" routerLinkActive="active" >Profile</a>
</nav>
<hr />
<router-outlet></router-outlet>
`
})
export class AdminComponent {
}
@Component({
template: `
<h3 class="title">Profile</h3>
`
})
export class ProfileComponent {
}
@Component({
template: `
<h3 class="title">Users</h3>
<hr />
`
})
export class UsersComponent {
}
Plunker !!
お役に立てれば!!
遅延読み込みモジュールを使用したソリューションの追加。これは、元の質問の本文ではなく、タイトルによる一般的な回答です。
UserCheckinModule
とLogin
のページ/コンポーネントを含むログインしていないユーザー用にSignup
という名前の個別のモジュールを作成しました。これらは通常、共通の設計と機能/サービスを共有するためです。
app.routing.module.ts-で定義されているルート
const routes: Routes = [
{ path: 'user', loadChildren: './user-checkin/user-checkin.module#UserCheckinModule' },
{ path: '**', redirectTo: 'user' }
];
UserCheckin
モジュールのser-checkin.-routing.module.tsで定義されているルート-
const routes: Routes = [
{
path: '',
component: CheckinComponent, // base template component
children: [
{ path: '', redirectTo: 'login' },
{ path: 'login', component: LoginComponent },
{ path: 'signup', component: SignupComponent },
{ path: '**', redirectTo: 'login' }
]
}
];
app.component.html
は既にrouter-outlet
そして、アプリ全体の基本テンプレート/レイアウトとして動作します。 UserCheckinModule
は子モジュールであり、独自のルートとベーステンプレートがあります。
checkin.component.html基本テンプレートのコンテンツ-
<router-outlet></router-outlet>