63 votes

Comment puis-je naviguer d'un frère ou d'une route?

Let's suppose que j'ai ce routeur config

export const EmployeeRoutes = [
   { path: 'sales', component: SalesComponent },
   { path: 'contacts', component: ContactsComponent }
];

et ont navigué à l' SalesComponent via cette URL

/department/7/employees/45/sales

Maintenant, je voudrais aller à l' contacts, mais comme je n'ai pas tous les paramètres pour un absolu route (par exemple, le ministère de l'ID, 7 dans l'exemple ci-dessus), je préfère y arriver à l'aide d'un lien relatif, par exemple

[routerLink]="['../contacts']"

ou

this.router.navigate('../contacts')

qui, malheureusement, ne fonctionne pas. Il y a peut être une solution évidente, mais je ne suis pas le voir. Quelqu'un peut-il aider ici s'il vous plaît?

111voto

Harry Ninh Points 8106

Si vous utilisez le nouveau routeur (3.0.0-beta2), vous pouvez utiliser le ActivatedRoute pour naviguer vers chemin d'accès relatif comme suit:

constructor(private router: Router, private r:ActivatedRoute) {} 

///
goToContact() {
  this.router.navigate(["../contacts"], { relativeTo: this.r });
}

80voto

Mark Rajcok Points 85912

Le RouterLink directive traite toujours le lien fourni comme un delta de l'URL:

[routerLink]="['/absolute']"
[routerLink]="['../../parent']"
[routerLink]="['../sibling']"
[routerLink]="['./child']"     // or
[routerLink]="['child']" 

// with route param     ../sibling;abc=xyz
[routerLink]="['../sibling', {abc: 'xyz'}]"
// with query param and fragment   ../sibling?p1=value1&p2=v2#frag
[routerLink]="['../sibling']" [queryParams]="{p1: 'value', p2: 'v2'}" fragment="frag"

L' navigate() méthode nécessite un point de départ (c'est à dire, l' relativeTo paramètre). Si aucun n'est fourni, la navigation est absolue:

constructor(private router: Router, private route: ActivatedRoute) {}

this.router.navigate("/absolute/path");
this.router.navigate("../../parent", {relativeTo: this.route});
this.router.navigate("../sibling",   {relativeTo: this.route});
this.router.navigate("./child",      {relativeTo: this.route}); // or
this.router.navigate("child",        {relativeTo: this.route});

// with route param     ../sibling;abc=xyz
this.router.navigate(["../sibling", {abc: 'xyz'}], {relativeTo: this.route});
// with query param and fragment   ../sibling?p1=value1&p2=v2#frag
this.router.navigate("../sibling", {relativeTo: this.route, 
    queryParams: {p1: 'value', p2: 'v2'}, fragment: 'frag'});

// RC.5+: navigate without updating the URL 
this.router.navigate("../sibling", {relativeTo: this.route, skipLocationChange: true});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X