2016-09-16 10 views
8

mam to w moim .routing.ts złożyćAngular2 router 2.0.0 nie przeładowuje komponentów, gdy ten sam adres URL jest załadowany różnymi parametrami?

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

Mój plik PageComponent sprawdza parametr id i wczytuje dane odpowiednio. W poprzednich wersjach routera, jeśli przeszedłem od/page/4 do/page/25, strona "przeładuje się", a składniki zostaną zaktualizowane.

Teraz, gdy próbuję przejść do/page/X, gdzie X jest identyfikatorem, za pierwszym razem ładuje się tylko wtedy, a adres URL zmienia się, ale składniki nie "ponownie ładują".

Czy jest coś, co należy przekazać, aby zmusić moje komponenty do przeładowania i zadzwonić do zdarzenia ngOnInit?

Odpowiedz

15

Aktualizacja 2

Ta odpowiedź jest tylko na dawno przerwało wersji routera.

Zobacz, jak to zrobić w bieżącym routerze.

Aktualizacja 1

To jest już ustalona (kątowe 2.3) dla nowego routera przez https://github.com/angular/angular/pull/13124 który umożliwia dostarczenie strategię niestandardowego wykorzystania.

Na przykład patrz także https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

oryginalny

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

To znany problem. Obecnie nie ma sposobu, aby router ponownie utworzył komponent na trasach zmieniających tylko parametr.

Omówili plany wprowadzenia w życie strategii ponownego użycia.

Możesz zapisać się params zmiany i wykonać swój kod tam zamiast w ngOnInit()

+1

Dziękuję subskrypcji params działa idealnie – Gillardo

+2

Jestem stoi sam problem na Kanciastymi 4. Czy istnieje jakieś rozwiązanie tego problemu? – pushp

+0

Co mają z tym zrobić strażnicy? – MgSam

-1

tego dzieła kodu dla obu kątowej 2 i 4. trzeba subskrybować param jak poniżej

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

Przypuśćmy Twoja strona nie zostanie ponownie załadowana, anuluj subskrypcję za pomocą polecenia ngOnDestroy.

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

to będzie jasne, że poprzednia wartość param

nad logiką pracy dla mnie. mam nadzieję, że ci to pomoże.

[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