2016-09-16 55 views
8

我有這個在我的.routing.ts文件Angular2路由器2.0.0在不同的參數加載相同的url時不重裝組件?

export const routing = RouterModule.forChild([ 
{ 
    path: 'page/:id', 
    component: PageComponent 
}]); 

PageComponent文件檢查id參數,並相應地加載數據。在以前版本的路由器中,如果我從/ page/4到/ page/25,頁面將「重新加載」並且組件會更新。

現在,當我嘗試導航到/ page/X其中X是id時,它只加載第一次,然後url更改,但組件不會再次「重新加載」。

是否有需要傳遞的信息來強制我的組件重新加載並調用ngOnInit事件?

回答

15

更新2

這答案只有一個早就停產了路由器的版本。

有關如何在當前路由器中執行此操作,請參見https://angular.io/api/router/RouteReuseStrategy

更新1

這是現在固定的(2.3角)由https://github.com/angular/angular/pull/13124新的路由器,它允許提供一個自定義重用策略。

舉一個例子也https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

https://github.com/angular/angular/issues/9811

這是一個已知的問題看。 目前無法讓路由器僅在僅參數路由更改時重新創建組件。

他們討論了最終實施一些重用策略的計劃。

您可以訂閱PARAMS改變,存在執行你的代碼,而不是在ngOnInit()

+1

謝謝訂閱到PARAMS完美的作品 – Gillardo

+2

我面臨同樣的問題上ANGULAR 4.是否有針對此問題的任何解決方案? – pushp

+0

守衛與此有什麼關係? – MgSam

-1

此代碼工作的兩個角2和4 需要申請帕拉姆像下面

selected_id:any; 
constructor(private route: ActivatedRoute) { } 
ngOnInit() 
{ 
    this.route.params.subscribe(params => { 
    this.selected_id = params['id']; 
    }); 
} 

假設仍然不會重新加載頁面,使用ngOnDestroy取消訂閱值。

ngOnDestroy() 
{ 
this.selected_id.unsubscribe(); 
} 

這將是清楚以前的參數值的方式

上面的邏輯爲我工作。希望它會對你有所幫助。

[Info] 
var selected_id = this.route.snapshot.paramMap.get('id'); 
//earlier i was used this code to get param value,it works when navigate from 
//different page but not in the same page reload 
相關問題