Est-il possible dans Angular 2 de définir un routage basé sur des paramètres de requête? J'aimerais avoir le comportement suivant:
Si l'utilisateur entre l'URL http:<server-path>/search
, je souhaite router vers un composant StartPage
.
Si l'utilisateur entre l'URL http:<server-path>/search?query=sometext
, je souhaite router vers le composant ResultList
.
Je sais qu'il est possible d'utiliser path parameters pour l'acheminement, mais ce n'est pas ce que j'aime faire. Je souhaite utiliser query parameters si possible . Je sais comment déclencher une navigation angulaire avec des paramètres de requête mais je ne sais pas comment configurer les itinéraires.
Par conséquent, vous ne pouvez pas définir path
avec la chaîne de requête mais vous pouvez utiliser route matcher
à la place et déterminer à quel moment router vers le composant ResultList
. Vous définissez ceci au-dessus de la définition de route par défaut pour search
de sorte que, si la correspondance échoue, la route de recherche par défaut ne contient aucune chaîne de requête.
{
component: ResultListComponent,
matcher: (url: UrlSegment[]) => {
console.log(url);
return url.length === 1 && url[0].path.indexOf('search?query=') > -1 ? ({consumed: url}) : null;
}
},
{
path: 'search',
component: SearchComponent,
}
Dans le code ci-dessous, je montrerai comment passer des paramètres de chaîne de requête sur n'importe quelle route.
supposons que nous voulions avoir l'URL ci-dessous:
http://localhost:4200/myUrl?QueryParamEx=2258
Dans votre constructeur, injectez la dépendance ROUTER
constructor(...private router: Router..){...}
La fonction de navigation nous permettra de naviguer vers l'URL précédente
goMyUrl() {
this.router.navigate(['/myUrl'], { queryParams: { QueryParamEx: '2258' } });
}
Vous pouvez également configurer quelque chose comme ceci:
Routes:
{ path: 'server-path/:id', component: ResultListComponent },
{ path: 'server-path', component: serverPathComponent },
ResultListComponent
queryParam: string;
ngOnInit() {
this.route.params.forEach((params: Params) => {
this.queryParam = params['id'];
});
}
Vous pouvez appeler n'importe quelle fonction ou tout ce que vous devez faire à l'aide de cette requête.
Pour plus d’informations sur les paramètres de requête, voir Guide de routage et de navigation