2016-04-15 243 views
0

考慮以下路徑;Angular2中的動態路由解析

/items/:id 

這是指在特定項目的視圖,然而,項目類型不是在運行時已知的,並且被用作一個多態組對象,例如;

  • /項目/ 1 - 項類型
  • /項目/ 2 - 物品類型B
  • /項目/ 3 - 項類型
  • 等...

每個項目可能有一組不同的子路由,具體取決於項目類型,路徑結構不同;

/items/1/object_in_type_A/:objectId/foo 
/items/2/foo/different_path_in_B 

到目前爲止,我已決定配置頂級路由器作爲基本上是包裝組件的非終止路由。當包裝器組件加載時,它會從服務中爲該項目請求一個模型,並根據該信息確定它是哪種類型的子對象。從那裏,它找到適當的組件,使用DynamicComponentLoader來呈現它。一旦適當的組件加載,組件就會恢復路由。

但是,我有我懷疑這是否是正確的做法,並希望瞭解在運行時評估方案路由這樣的概念,或者如果它甚至做出正確的做法。

+0

這不回答你的問題,但你應該看看[NGRX /路由器(https://github.com/ngrx/router),它的設計從下往上朝着這個目的 – drewmoore

+0

如果項目類型是不同的組件,然後每一個定義了自己的子路徑 – Chandermani

+0

我想什麼,我試圖找出是否是一個路由/ URL可以分階段進行評估。考慮第一個例子'/ items/1/objects/123/foo'。 有沒有一種方法來評估'items/1',然後一旦實例化,傳遞下一個路徑階段,'objects/123/foo'? –

回答

0

在新的路由器(>= RC.3https://angular.io/docs/ts/latest/api/router/index/Router-interface.html#!#resetConfig-anchorresetConfig可用於

router.resetConfig([ 
{ path: 'team/:id', component: TeamCmp, children: [ 
    { path: 'simple', component: SimpleCmp }, 
    { path: 'user/:name', component: UserCmp } 
] } 
]); 

這樣,您就可以加載從服務器更多的數據,並在任何時候重新配置路由器。組件

延遲加載工作仍然在進行中,據我所知。

https://github.com/angular/angular/issues/11437#issuecomment-245995186提供RC.6 Plunker