J'utilise angular 5.0.3, je voudrais démarrer mon application avec un tas de paramètres de requête comme /app?param1=hallo¶m2=123
. Chaque astuce donnée dans Comment obtenir les paramètres de requête à partir de l'URL dans Angular 2? ne fonctionne pas pour moi.
Des idées pour faire fonctionner les paramètres de requête?
private getQueryParameter(key: string): string {
const parameters = new URLSearchParams(window.location.search);
return parameters.get(key);
}
Cette fonction privée m'aide à obtenir mes paramètres, mais je ne pense pas que ce soit la bonne manière dans le nouvel environnement Angular.
[mise à jour:] Mon application principale ressemble à
@Component({...})
export class AppComponent implements OnInit {
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
// would like to get query parameters here...
// this.route...
}
}
Réponses:
Dans Angular 5, les paramètres de requête sont accessibles en vous abonnant à
this.route.queryParams
.Exemple:
/app?param1=hallo¶m2=123
tandis que les variables de chemin d'accès sont accessibles par
this.route.snapshot.params
Exemple:
/param1/:param1/param2/:param2
la source
C'est la solution la plus propre pour moi
la source
Je sais que OP a demandé une solution Angular 5, mais encore pour vous tous qui tombez sur cette question pour les versions angulaires plus récentes (6+). En citant les documents , concernant ActivatedRoute.queryParams (sur lesquels la plupart des autres réponses sont basées):
Selon la documentation , le moyen simple d'obtenir les paramètres de requête ressemblerait à ceci:
Pour des méthodes plus avancées (par exemple la réutilisation avancée des composants), consultez ce chapitre Docs.
ÉDITER:
Comme indiqué correctement dans les commentaires ci-dessous, cette réponse est fausse - du moins pour le cas spécifié par OP.
OP demande d'obtenir les paramètres de requête globaux (/ app? Param1 = hallo & param2 = 123); dans ce cas, vous devez utiliser queryParamMap (comme dans @ dapperdan1985 answer).
paramMap, d'autre part, est utilisé sur des paramètres spécifiques à la route (par exemple / app /: param1 /: param2, ce qui donne / app / hallo / 123).
Merci à @JasonRoyle et @daka pour l'avoir signalé.
la source
queryParamMap
neparamMap
pas récupérer les paramètres de chaîne de requête?paramMap
ne fonctionne pas.Vous pouvez également utiliser HttpParams , tels que:
la source
path: '', redirectTo: '/list'
. Le this.route.snapshot ne fonctionne pas pour moi car il redirige vers / list qui élimine le queryString 'lang'. Mais cette solution fonctionne pour moi.METTRE À JOUR
la source
son travail pour moi:
regardez plus d'options Comment obtenir les paramètres de requête de l'URL dans angular2?
la source
Paramètres de requête et de chemin (Angular 8)
Pour une URL comme https://myapp.com/user/666/read?age=23, utilisez
METTRE À JOUR
Dans le cas où vous utilisez
this.router.navigate([someUrl]);
et que vos paramètres de requête sont incorporés dans unesomeUrl
chaîne, angular encode une URL et vous obtenez quelque chose comme ceci https://myapp.com/user/666/read%3Fage%323 - et la solution ci-dessus donnera un résultat erroné ( queryParams sera vide et les paramètres de chemin peuvent être collés au dernier paramètre de chemin s'il se trouve à l'extrémité du chemin). Dans ce cas, modifiez le mode de navigation pourla source
Je suis tombé sur cette question lorsque je cherchais une solution similaire, mais je n'avais besoin de rien comme un routage complet au niveau de l'application ou plus de modules importés.
Le code suivant fonctionne très bien pour mon utilisation et ne nécessite aucun module ou importation supplémentaire.
http://localhost:4200/?param1=hello¶m2=123
les sorties:la source
Angular Router fournit la méthode parseUrl (url: string) qui analyse l'URL en UrlTree . Une des propriétés d'UrlTree est queryParams. Donc vous pouvez faire qc comme:
la source
Malheureusement, la solution la plus propre n'est pas la solution la plus extensible. Dans les versions récentes d'Angular, il est suggéré dans les autres réponses que vous pouvez facilement obtenir les paramètres de requête en utilisant ActivatedRoute Injectible et en utilisant spécifiquement la propriété snapshot:
ou la propriété subscribe (utilisée dans les cas où la chaîne de requête sera mise à jour, par exemple en naviguant dans les identifiants utilisateur):
Je suis ici pour vous dire que ces solutions ont un défaut béant qui n'a pas été résolu depuis un certain temps: https://github.com/angular/angular/issues/12157
Dans l'ensemble, la seule solution à toute épreuve est d'utiliser du bon vieux javascript vanille. Dans ce cas, j'ai créé un service de manipulation d'URL:
la source
Lorsque vous avez un objet route vide, c'est principalement dû au fait que vous n'utilisez pas de sortie de routeur dans votre app.component.html.
Sans cela, vous ne pourrez pas obtenir un objet route significatif avec des sous-objets non vides, en particulier les paramètres et queryParams.
Essayez d'ajouter
<router-outlet><router-outlet>
juste avant d'appeler votre<app-main-component></app-main-component>
Avant cela, assurez-vous que votre paramètre de requête est prêt dans app-routing> qui exporte la classe Route utilisée par le composant App:
Dernière chose bien sûr, pour obtenir votre paramètre, j'utilise personnellement
this.route.snapshot.params.dynamicParam
où dynamicParam est le nom utilisé dans votre composant de routage d'application :)la source
Soyez prudent avec vos itinéraires. Un "redirectTo" supprimera | supprimera tout paramètre de requête.
J'ai appelé mon composant principal avec des paramètres de requête comme "/ main? Param1 = a & param2 = b et je suppose que mes paramètres de requête arrivent dans la méthode" ngOnInit () "dans le composant principal avant que la redirection ne prenne effet.
Mais c'est faux. La redirection viendra avant, supprimez les paramètres de requête et appelez la méthode ngOnInit () dans le composant principal sans paramètres de requête.
J'ai changé la troisième ligne de mes itinéraires en
et maintenant mes paramètres de requête sont accessibles dans les principaux composants ngOnInit et aussi dans le PageOneComponent.
la source
Trouvé dans: les composants parents obtiennent des paramètres vides d'ActivatedRoute
A travaillé pour moi:
la source
Je suis juste tombé sur le même problème et la plupart des réponses ici semblent ne le résoudre que pour le routage interne angulaire, puis certaines d'entre elles pour les paramètres d'itinéraire qui ne sont pas les mêmes que les paramètres de requête.
Je suppose que j'ai un cas d'utilisation similaire à la question initiale de Lars.
Pour moi, le cas d'utilisation est par exemple le suivi des références:
Angular en cours d'exécution
mycoolpage.com
, avec routage de hachage,mycoolpage.com
redirige donc versmycoolpage.com/#/
. Pour référence, cependant, un lien tel quemycoolpage.com?referrer=foo
devrait également être utilisable. Malheureusement, Angular supprime immédiatement les paramètres de la requête, allant directement àmycoolpage.com/#/
.Toute sorte de «truc» avec l'utilisation d'un composant vide + AuthGuard et obtenir
queryParams
ouqueryParamMap
n'a malheureusement pas fonctionné pour moi. Ils étaient toujours vides.Ma solution hacky a fini par être de gérer cela dans un petit script dans
index.html
lequel obtient l'URL complète, avec paramètres de requête. J'obtiens ensuite la valeur du paramètre de la demande via la manipulation de la chaîne et je la place sur l'objet window. Un service distinct gère ensuite l'obtention de l'ID de l'objet window.script index.html
Un service
la source
la source
http: // localhost: 4200 / products? order = popular
Nous pouvons accéder au paramètre de requête de commande comme ceci:
Il y a aussi queryParamMap, qui retourne une observable avec un objet paramMap.
Compte tenu de l'URL de la route suivante:
http: // localhost: 4200 / products? order = popular & filter = new
Source - https://alligator.io/angular/query-parameters/
la source
À, je pense que Angular 8:
ActivatedRoute.params
a été remplacé parActivatedRoute.paramMap
ActivatedRoute.queryParams
a été remplacé parActivatedRoute.queryParamMap
la source
la source
Si vous n'utilisez pas de routeur angulaire, essayez de lancer une requête . Installez-le
à votre projet. Dans votre composant, faites quelque chose comme ça
Le
substring(1)
est nécessaire car si vous avez quelque chose comme ça,'/mypage?foo=bar'
le nom de la clé sera?foo
la source