2016-06-30 19 views
25

Próbuję nawigować do trasy w Angular 2, łącząc parametry trasy i zapytania.Angular 2 router.navigate

Oto przykład trasa gdzie trasa jest ostatnią częścią ścieżki:

{ path: ':foo/:bar/:baz/page', component: AComponent } 

Próbując połączyć za pomocą tablicy tak:

this.router.navigate(['foo-content', 'bar-contents', 'baz-content', 'page'], this.params.queryParams) 

nie otrzymuję żadnych błędów iz tego co mogę zrozumieć, to powinno działać.

kątowej 2 Docs (w tej chwili) mają następujące jako przykład:

{ path: 'hero/:id', component: HeroDetailComponent } 

['/hero', hero.id] // { 15 } 

Czy ktoś może zobaczyć, gdzie idę źle? Jestem na routerze 3.

Odpowiedz

46

Jeśli pierwszy segment nie rozpoczyna się od /, jest to trasa względna. router.navigate potrzebuje parametru relativeTo względnego nawigacji

Albo zrobić trasę absolutną:

this.router.navigate(['/foo-content', 'bar-contents', 'baz-content', 'page'], this.params.queryParams) 

lub przekazać relativeTo

this.router.navigate(['../foo-content', 'bar-contents', 'baz-content', 'page'], {queryParams: this.params.queryParams, relativeTo: this.currentActivatedRoute}) 

Zobacz także

+1

wiedzieć ten wątek jest stary - ale kilka szybkich pytań dla mojego zrozumienia: 1. W 2. przypadku powyżej powinnaś t to jest 'this.router.navigate (** ['foo ** - content', 'bar-content', ....' (bez/na początku pierwszego segmentu, ponieważ jest względny) 2. Poza tym. BieżącyActivatedRoute jakie są inne możliwe wartości dla relativeTo? – Vikas

+0

Jeśli chcesz, aby było względne, pomiń wiodące '/', nie zamierzałem tego. Dowolna trasa, którą ścieżka ma być względna. –

+1

Dzięki - ale w swojej odpowiedzi wspomniałeś, że jeśli pierwszy segment zaczyna się od /, to jest to absolutna nawigacja. Dlaczego więc krewny byłby potrzebny? – Vikas

5

import { ActivatedRoute } from '@angular/router'; 
 

 
export class ClassName { 
 
    
 
    private router = ActivatedRoute; 
 

 
    constructor(r: ActivatedRoute) { 
 
     this.router =r; 
 
    } 
 

 
onSuccess() { 
 
    this.router.navigate(['/user_invitation'], 
 
     {queryParams: {email: loginEmail, code: userCode}}); 
 
} 
 

 
} 
 

 

 
Get this values: 
 
--------------- 
 

 
ngOnInit() { 
 
    this.route 
 
     .queryParams 
 
     .subscribe(params => { 
 
      let code = params['code']; 
 
      let userEmail = params['email']; 
 
     }); 
 
}

Ref: https://angular.io/docs/ts/latest/api/router/index/NavigationExtras-interface.html