2017-07-10 19 views
1

我有下面的路線,ID是一個可選參數,所以用戶可以加載信息,或者如果沒有ID提供他們可以添加信息。 我希望能夠重用組件,以便頁面不必重新加載(在ngOnInit中的api調用),但是因爲它們是兩個獨立的路由,角度始終創建一個全新的組件,並調用ngOnInit。角度重用組件在不同的路線

我一直在使用孩子,但仍然得到了同樣的問題

(這是與角4路由器)

const routes: Routes = [ 
    { 
    path: 'stuff/info', 
    component: InfoComponent, 
    }, 
    { 
    path: 'stuff/info/:id', 
    component: InfoComponent, 
    }, 
] 
+0

你是否得到這樣做的任何錯誤? – Skeptor

+0

@allanjwalter請編輯您的問題,並用您使用此代碼獲得的錯誤。 –

+0

沒有錯誤,我在問題中清楚地描述了問題,因爲角度不會重用組件 – allanjwalter

回答

0

角已要求,可選和查詢參數嘗試。您定義的「可選」參數不是「可選的」,因爲Angular定義了可選參數。對於「true」可選參數,您不需要將它們定義爲路徑配置的一部分。所以,你可以定義只stuff/info像這樣的路線:

const routes: Routes = [ 
    { 
    path: 'stuff/info', 
    component: InfoComponent, 
    } 
] 

然後,您可以添加使用.navigate或routerLink如下面的圖中的可選參數。

enter image description here

注:由於角4的,這應該是

this.route.snapshot.paramMap.get('start')

或者,您可以總是通過ID和傳遞一個0或在創建一些其他已知值。我在這裏有一個完整的例子:https://github.com/DeborahK/Angular-Routing

+0

這很好,謝謝,出於興趣,可能將這些參數從外部源傳遞到鏈接中,在這種情況下他們不知何故必須在網址中顯示? – allanjwalter

+0

我不確定我完全明白嗎?但是,如果你的意思是你是否可以從你的博客鏈接(例如)到「www.mysite.com/stuff/info; id = 15」,那麼是的。角度路由支持所謂的「深度鏈接」。您只需正確設置您的服務器以進行URL重寫,以便它允許Angular應用程序處理URL。 – DeborahK

+0

完美!謝謝 – allanjwalter