2017-01-25 19 views
27

Tôi đang tìm kiếm một giải pháp với góc 2 cho kịch bản giải thích dưới đây:góc 2 - tuyến submodule và lồng <Router-ổ cắm>

enter image description here

Trong kịch bản này, top-nav chứa các liên kết để tải submodules và sub-nav có các liên kết để cập nhật nội dung của submodule.

Các URL nên bản đồ như:

  • /home => tải trang nhà trong thành phần chính ổ cắm Router
  • /submodule => tải submodule trong ổ cắm phần router chính và theo mặc định sẽ hiển thị trang chủ của submodule và navbar phụ
  • /submodule/feature => tải các tính năng bên trong ổ cắm router của submodule

các module ứng dụng (và thành phần ứng dụng) chứa một đầu thanh điều hướng để điều hướng đến các mô-đun con khác nhau và mẫu thành phần ứng dụng có thể trông giống như thế này

<top-navbar></top-navbar> 
<router-outlet></router-outlet> 

Nhưng đây là sự phức tạp. Tôi cần submodules của tôi để có bố trí tương tự với một thanh nav cấp thứ hai và ổ cắm router riêng của họ để tải các thành phần riêng của họ.

<sub-navbar></sub-navbar> 
<router-outlet name='sub'></router-outlet> 

Tôi đã thử mọi lựa chọn và tìm kiếm khắp nơi nhưng không thể tìm ra một giải pháp để có một mẫu mặc định (như thành phần ứng dụng) trong submodule với ổ cắm router và cũng tải các nội dung của submodule trong các bộ định tuyến bên trong đầu ra mà không làm mất sub-nav.

Tôi sẽ đánh giá cao mọi đầu vào hoặc ý tưởng

+0

Vì vậy, chính xác những gì đang xảy ra với các thiết lập hiện tại? – micronyks

+0

với thiết lập hiện tại tôi không thể sử dụng ổ cắm bộ định tuyến bên trong. Định tuyến tải ngay cả các thành phần submodule trong bộ định tuyến chính và tất cả các mẫu thành phần submodule của tôi phải có một sub-nav bao gồm –

+1

bạn có tìm thấy giải pháp cho bộ định tuyến lồng nhau mà không mất điều hướng phụ không? Tôi đã rơi vào một vấn đề tương tự. – Saurav

Trả lời

19

Trang html sẽ trông như thế này.

Main Page

<top-navbar></top-navbar> 
<router-outlet></router-outlet> 

Sub Mô-đun Trang

<sub-navbar></sub-navbar> 
<router-outlet name='sub'></router-outlet> 

trên cách nhấn vào menu trong thanh top-nav ổ cắm tuyến đường chính sẽ tuyến đường receptively.

trong khi nhấp vào thanh điều hướng phụ, đầu ra bộ định tuyến [phụ] sẽ định tuyến tương ứng.

HTML là tốt, lừa sẽ được đưa ra tại văn app.routing

app.routing.ts

const appRoutes: Routes = [ 
    { 
    path: 'login', 
    component: LoginComponent 
    }, 
    { path: 'home', 
    component: homeComponent, 
    children: [ 
     { 
     path: 'module1', 
     component: module1Component, 
     children: [ 
      { 
      path: 'submodule11', 
      component: submodule11Component, 
      } 
      { 
      path: '', 
      redirectTo: 'submodule11', 
      pathMatch: 'full' 
      } 
     ] 
     }, 
     { 
     path: 'module2', 
     component: module2omponent, 
     children: [ 
      { 
      path: 'submodule21', 
      component: submodule21Component, 
      }, 
      { 
      path: '', 
      redirectTo: 'submodule21', 
      pathMatch: 'full' 
      } 
     ] 
     } 
     ] 
     }, 
     { 
     path: 'about', 
     component: aboutComponent 
     } 
] 

Hy vọng nó sẽ giúp bạn.

Chi tiết https://angular.io/docs/ts/latest/guide/router.html

+0

đúng, đó là những gì tôi đã đề cập đến tôi đã có –

+0

Yesh đường html của bạn là chính xác, Trò chơi chính là với app.routing.ts Tôi đã thực hiện các ứng dụng tương tự hai lần. –

+0

Cảm ơn câu trả lời. Tôi đã thử định tuyến tương tự nhưng sự nhầm lẫn của tôi là nơi mà nên submodule router outlet đi? trên mô-đun chính rõ ràng là cửa hàng bộ định tuyến phải nằm trong mẫu của app.component nhưng chúng tôi không có cùng khái niệm về thành phần ứng dụng cho các mô-đun con. vậy, nơi ổ cắm bộ định tuyến "phụ" đi đâu? –

0

bạn có đề cập đến tên ổ cắm ở các tuyến đường đề cập đến tên ổ cắm router của bạn trong định tuyến như thế này "ổ cắm: 'phụ"

routes: Routes = [ 
 
    {path:'', redirectTo: 'login', pathMatch: 'full'}, 
 
    { 
 
    path: 'login', 
 
    component: LoginComponent, 
 
    
 
    }, 
 
    { path: 'home', 
 
    component: AppComponent, 
 
     children: [ 
 
     {path: 'home/pdf',component: SideMenuPage,outlet:"sub" }, 
 
     {path:'home/addFileUp',component:SidePageAdd,outlet:"sub"}, 
 
     ]}, 
 
    
 

 
]; 
 
    

4

Sử dụng:

RouterModule.forChild() 
... 
<router-outlet name="sub"></router-outlet> 
... 
[routerLink]="[{ outlets: { sub: [subRouteName] } }]" 

Ví dụ đầy đủ:

HTML

<div class="tabs tinyscroll"> 
    <button *ngFor="let tab of tabs" 
    [routerLink]="[{ outlets: { sub: [tab.name] } }]" 
    routerLinkActive="selected"> 
    <span>{{ tab.label }}</span> 
    </button> 
</div> 

<section> 
    <router-outlet name="sub"></router-outlet> 
</section> 

app.module.ts

imports: [ 
... 
RouterModule.forChild([ 
     { 
     path: 'registers', 
     component: RegistersComponent, 
     children: [ 
      {path: 'vehicles', component: VehiclesComponent, outlet: 'sub'}, 
      {path: 'drivers', component: DriversComponent, outlet: 'sub'}, 
      {path: 'bases', component: BasesComponent, outlet: 'sub'}, 
      {path: 'lines', component: LinesComponent, outlet: 'sub'}, 
      {path: 'users', component: UsersComponent, outlet: 'sub'}, 
      {path: 'config', component: ConfigComponent, outlet: 'sub'}, 
      {path: 'companies', component: CompaniesComponent, outlet: 'sub'} 
     ], 
     canActivate: [AuthGuard] 
     } 
    ]), 
... 
Các vấn đề liên quan