2016-11-18 5 views
4

Ich habe eine Angular2 App mit einer Route wie folgt aus:Angular2 - ngOnDestroy() nicht auf ähnliche Route genannt

{ 
    path: '', 
    component: ContentComponent, 
    children: [ 
    { 
     path: 'folder/:folderId', 
     resolve: {    
     currentFolder: CurrentFolderResolver, 
     }, 
     children: [ 
     { 
      path: '', 
      resolve: { 
      folderStructure: FolderStructureResolve, 
      }, 
      component: FolderOverviewComponent, 
     }, 
     { 
      path: 'users', 
      component: UsersComponent, 
     } 
     ] 
    } 
    ] 
} 

Wenn von einer Route wie /Ordner/123-/Ordner/456 Navigation , Winkel wird ngOnDestroy() im FolderOverviewComponent nicht auslösen. Navigieren zu /Ordner/456/Benutzer werden tun.

Mit anderen Worten, es scheint, dass Angular die Komponente nicht zerstört, wenn sich die Route nicht ändert (den dynamischen Teil von : folderId ignorierend). Das scheint vernünftig, aber ich muss Dinge in ngOnDestroy() aufräumen.

Kann ich Routes so konfigurieren, dass sie jedes Mal, wenn ich zu einer neuen Route navigiere (d. H. Mit einem anderen Parameter), einen Destroy aufrufen?

Antwort

4

Das ist von Entwurf. Wenn sich nur ein Routenparameter ändert, der dazu führt, dass dieselbe Route verwendet wird, wird die Komponente nicht zerstört und neu erstellt, sondern wiederverwendet.

können Sie auf params Änderungen abonnieren zu können, Code auszuführen, wenn die Route geändert wurde:

constructor(router: ActivatedRoute) { 
    router.params.subscribe(param => routeChanged(param['folderId'])); 
} 

Es Pläne sind mehr Flexibilität in der Zukunft zu liefern, aber das ist derzeit der Weg zu gehen.

Siehe https://angular.io/guide/router#activated-route-in-action

+0

Kann ich ein bisschen näher, oder einige zusätzliche Ressourcen auch beantragen? A2 Docs erwähnen das nur nebenbei und ich kann nirgendwo anders Details dazu finden. Alle Antworten, die in Google angezeigt werden, sind für den alten Router, vor Modulen. – jake

+1

https://github.com/angular/angular/issues/7757#issuecomment-236737846 Ich weiß nicht über andere Dokumente. –

+0

@ GünterZöchbauer Gab es seit dieser Frage eine bessere Lösung? – Aarmora