J'utilise angular2.0.0-beta.7. Lorsqu'un composant est chargé sur un chemin tel /path?query=value1
qu'il est redirigé vers /path
. Pourquoi les paramètres GET ont-ils été supprimés? Comment puis-je conserver les paramètres?
J'ai une erreur dans les routeurs. Si j'ai une route principale comme
@RouteConfig([
{
path: '/todos/...',
name: 'TodoMain',
component: TodoMainComponent
}
])
et ma route d'enfant comme
@RouteConfig([
{ path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
{ path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])
alors je ne peux pas obtenir de paramètres dans TodoListComponent. Je peux obtenir
params("/my/path;param1=value1;param2=value2")
mais je veux le classique
query params("/my/path?param1=value1¶m2=value2")
typescript
angular
FireGM
la source
la source
@RouteConfig
celapath
?Réponses:
En injectant une instance de l'
ActivatedRoute
un peut souscrire à une variété d'observables, y compris unqueryParams
et unparams
observable:UNE NOTE CONCERNANT LA DÉSABONNEMENT
@Reto et @ codef0rmer avaient très justement souligné que, selon les documents officiels, une méthode
unsubscribe()
à l'intérieur de la composanteonDestroy()
n'est pas nécessaire dans ce cas. Cela a été supprimé de mon exemple de code. (voir la boîte d'alerte bleue dans ce tutoriel)la source
The Router manages the observables it provides and localizes the subscriptions. The subscriptions are cleaned up when the component is destroyed, protecting against memory leaks, so we don't need to unsubscribe from the route params Observable.
Lorsqu'une URL comme celle-ci http://stackoverflow.com?param1=value
Vous pouvez obtenir le param1 par code:
la source
Même si la question spécifie la version bêta 7 , cette question apparaît également comme premier résultat de recherche sur Google pour les expressions courantes telles que les paramètres de requête angulaires 2 . Pour cette raison, voici une réponse pour le plus récent routeur (actuellement en alpha.7 ).
La façon dont les paramètres sont lus a radicalement changé. Vous devez d'abord injecter une dépendance appelée
Router
dans les paramètres de votre constructeur comme:et après cela, nous pouvons souscrire aux paramètres de requête sur notre
ngOnInit
méthode (le constructeur est correct aussi, maisngOnInit
devrait être utilisé pour la testabilité) commeDans cet exemple, nous lisons l' ID de paramètre de requête à partir d'une URL comme
example.com?id=41
.Il y a encore peu de choses à remarquer:
params
likeparams['id']
renvoie toujours une chaîne , qui peut être convertie en nombre en la préfixant avec+
.la source
if (params.hasOwnProperty('id')) { this.selectedId = params['id'] } else { this.selectedId = params['identification']}
.J'ai vraiment aimé la réponse de @ StevePaul mais nous pouvons faire la même chose sans appel subscribe / unsubscribe.
la source
Pour envoyer des paramètres de requête
Pour recevoir des paramètres de requête
Source officielle
la source
Salut, vous pouvez utiliser URLSearchParams, vous pouvez en savoir plus à ce sujet ici .
importer:
et fonction:
Remarque : il n'est pas pris en charge par toutes les plates-formes et semble être dans un état "EXPÉRIMENTAL" par les documents angulaires
la source
if (window.location.search.indexOf('?') == 0){ normalizedQueryString = window.location.search.substring(1); } else { normalizedQueryString = window.location.search; } let params = new URLSearchParams(normalizedQueryString);
Tout d'abord, ce que j'ai trouvé en travaillant avec Angular2, c'est que l'url avec une chaîne de requête serait/path;query=value1
Pour y accéder dans un composant que vous utilisez Voici donc, mais suit maintenant un bloc de code:
Quant à savoir pourquoi il serait supprimé lorsque vous chargez le composant, ce n'est pas un comportement par défaut. J'ai vérifié spécifiquement dans un projet de test propre et je n'ai pas été redirigé ou modifié. S'agit-il d'un itinéraire par défaut ou de quelque chose de spécial concernant le routage?
Lisez à propos du routage avec des chaînes de requête et des paramètres dans le didacticiel Angular2 à https://angular.io/docs/ts/latest/guide/router.html#!#query-parameters
la source
Vous pouvez obtenir les paramètres de requête lorsqu'ils sont passés dans l'URL en utilisant ActivatedRoute comme indiqué ci-dessous: -
url: - http: /domain.com? test = abc
la source
Obtenez les paramètres d'URL en tant qu'objet.
la source
Si vous ne souhaitez obtenir le paramètre de requête qu'une seule fois, la meilleure façon est d'utiliser la méthode take afin de ne pas vous soucier de la désinscription. Voici l'extrait simple: -
Remarque: Supprimez take (1) si vous souhaitez utiliser des valeurs de paramètres à l'avenir.
la source
c'est maintenant:
la source
J'espère que cela aidera quelqu'un d'autre.
La question ci-dessus indique que la valeur du paramètre de requête est nécessaire après la redirection de la page et nous pouvons supposer que la valeur de l'instantané (l'alternative non observable) serait suffisante.
Personne ici n'a mentionné snapshot.paramMap.get dans la documentation officielle .
Donc avant de l'envoyer, ajoutez ceci dans le composant d'envoi / redirection:
puis redirigez comme l'un ou l'autre (documenté ici ):
ou simplement:
Assurez-vous que vous l'avez ajouté dans votre module de routage comme indiqué ici :
Et enfin, dans votre composant qui doit utiliser le paramètre de requête
ajouter des importations (documentées ici ):
inject ActivatedRoute
(la documentation importe également switchMap et injecte également Router et HeroService - mais ils sont nécessaires uniquement pour une alternative observable - ils ne sont PAS nécessaires lorsque vous utilisez une alternative de capture instantanée comme dans notre cas):
et obtenez la valeur dont vous avez besoin (documentée ici ):
REMARQUE: SI VOUS AJOUTEZ LE MODULE DE ROUTAGE À UN MODULE DE FONCTIONNALITÉS (COMME INDIQUÉ DANS LA DOCUMENTATION) ASSUREZ-VOUS QUE DANS APP.MODULE.ts QUE LE MODULE DE ROUTAGE VIENT AVANT AppRoutingModule (ou tout autre fichier avec des routes d'application au niveau racine) DANS LES IMPORTATIONS: []. AUTREMENT, LES ITINÉRAIRES DE FONCTIONNEMENT NE SERONT PAS TROUVÉS (COMME ILS VIENDRAI APRÈS {path: '**', redirectTo: '/ not-found'} et vous ne verriez que des messages non trouvés).
la source
Il vous suffit d'injecter ActivatedRoute dans le constructeur, puis d'accéder aux paramètres ou aux paramètres de requête par-dessus
Dans certains cas, cela ne donne rien dans NgOnInit ... peut-être à cause de l'appel init avant l'initialisation des paramètres dans ce cas, vous pouvez y parvenir en demandant à observable d'attendre un certain temps par la fonction debounceTime (1000)
par exemple =>
debounceTime () N'émet une valeur de la source observable qu'après un laps de temps particulier passé sans autre émission de source
la source
Vous ne pouvez pas obtenir un paramètre du RouterState s'il n'est pas défini dans la route, donc dans votre exemple, vous devez analyser la chaîne de requête ...
Voici le code que j'ai utilisé:
la source
Requête et chemin (angulaire 8)
Si vous avez une URL comme https://myapp.com/owner/123/show?height=23, utilisez
METTRE À JOUR
Dans le cas où lorsque vous utilisez
this.router.navigate([yourUrl]);
et que vos paramètres de requête sont intégrés dans uneyourUrl
chaîne, angular code une URL et vous obtenez quelque chose comme ceci https://myapp.com/owner/123/show%3Fheight%323 - et la solution ci-dessus donnera un résultat incorrect ( queryParams sera vide et les paramètres de requête peuvent être collés au dernier paramètre de chemin s'il se trouve à l'extrémité du chemin). Dans ce cas, changez le mode de navigation vers cela source