2017-04-12 2 views
0

Ich habe zur Zeit einen Router mit (nur relevant) bekam zwei Routen:Router navigate scheint nicht Komponente sich zu ändern

{ path: ':org', component: OrgComponent, resolve: [ OrgResolver ] } 
{ path: '', component: NotFoundComponent }, 

Der Resolver ist ziemlich geradlinig:

constructor(private router: Router, private orgService: OrgService) { } 

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Org> { 
    return this.orgService.getOrgData(route.params['org']).map(function (org) { 
     if (org === null) { 
      this.router.navigate['/']; 
      return null; 
     } else { 
      return org; 
     } 
    }); 
} 

Wenn Ich gehe direkt zu /, ich traf die NotFoundComponent. Wenn ich zu einer Route wie /invalid gehe, die OrgService als null zurückgibt, also ungültig, leitet die App an / weiter, aber die Komponente bleibt gleich. Und weil es keine :org im Weg ist, schlägt der API-Aufruf (I überprüfen, um sicherzustellen, dass Sie in einer Reihe von irgendeiner Art passieren) und die App stürzt mit diesem Fehler:

ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'navigate' of undefined 

Ich kann den Absturz Teil beheben , aber was ich erwarte ist, dass wenn du an einen ungültigen Ort gehst, ich dich zu einem anderen Ort weiterleiten möchte. Auf lange Sicht wird dies ein 404-Standort sein, aber im Moment versuche ich nur, den Router in den Griff zu bekommen.

Bin Verständnis ich nicht etwas darüber, wie navigate funktionieren soll?

+0

Für Routen mit Pfad '' '' und keine Kinder verwenden 'pathMatch: 'full'' –

+0

Sie scheinen nicht' navigate' Methode richtig aufzurufen: 'this.router.navigate (['/']); ',' nicht this.router.navigate [ ‚/‘]; ' –

+0

@VohidjonKarimjonov Sorry, dass Fehler kam, während ich ein paar Tests geschrieben, um herauszufinden, was los war. Mein ursprünglicher Code hatte es definitiv als Funktion, nicht als Array. – RhoVisions

Antwort

0

Ein Kollege hat mich darauf hingewiesen wurde ich in .map eine Standardfunktion, keinen Pfeil Funktion. Deswegen. this.router.navigate war der Teil, der versagte, nicht das tatsächliche Laden von Komponenten.

return this.orgService.getOrgData(route.params['org']).map(function (org) { 

zu

return this.orgService.getOrgData(route.params['org']).map((org) => { 

das Problem gelöst ändern.

Verwandte Themen