Vous pouvez accéder à l'itinéraire actuel avec de nouveaux paramètres de requête, qui ne rechargeront pas votre page, mais mettront à jour les paramètres de requête.
Quelque chose comme (dans le composant):
constructor(private router: Router) { }
public myMethodChangingQueryParams() {
const queryParams: Params = { myParam: 'myNewValue' };
this.router.navigate(
[],
{
relativeTo: activatedRoute,
queryParams: queryParams,
queryParamsHandling: 'merge', // remove to replace all query params by provided
});
}
Notez que même s'il ne rechargera pas la page, il poussera une nouvelle entrée dans l'historique du navigateur. Si vous souhaitez le remplacer dans l'historique au lieu d'y ajouter une nouvelle valeur, vous pouvez utiliser { queryParams: queryParams, replaceUrl: true }
.
EDIT: Comme déjà souligné dans les commentaires, []
et la relativeTo
propriété manquait dans mon exemple d'origine, donc cela aurait pu également changer l'itinéraire, pas seulement les paramètres de requête. La bonne this.router.navigate
utilisation sera dans ce cas:
this.router.navigate(
[],
{
relativeTo: this.activatedRoute,
queryParams: { myParam: 'myNewValue' },
queryParamsHandling: 'merge'
});
Définir la nouvelle valeur de paramètre sur null
supprimera le paramètre de l'URL.
Radosław Roszkowiak
la source
[]
au lieu de['.']
pour que cela fonctionnethis.activatedRoute.queryParams.subscribe
et effectuer diverses mises à jour dans votre composant, mais existe-t-il un moyen angulaire simple de charger simplement la route de sorte que le va-et-vient fonctionne automatiquement?La réponse de @ Radosław Roszkowiak est presque correcte, sauf que cela
relativeTo: this.route
est requis comme ci-dessous:la source
Dans Angular 5, vous pouvez facilement obtenir et modifier une copie de l' urlTree en analysant l'url actuelle. Cela inclura les paramètres de requête et les fragments.
La "bonne façon" de modifier un paramètre de requête est probablement avec le createUrlTree comme ci-dessous qui crée un nouvel UrlTree à partir du courant tout en nous permettant de le modifier à l'aide de NavigationExtras .
Pour supprimer un paramètre de requête de cette manière, vous pouvez le définir sur
undefined
ounull
.la source
navigateByUrl
est différent denavigate
- pas seulement avec le paramètre UrlTree. Voir stackoverflow.com/a/45025432/271012Essayer
fonctionnera pour la même navigation d'itinéraire autre que les guillemets simples.
la source
La réponse avec le plus de votes a partiellement fonctionné pour moi. L'URL du navigateur est restée la même mais mon
routerLinkActive
ne fonctionnait plus après la navigation.Ma solution était d'utiliser lotation.go:
J'ai utilisé HttpParams pour créer la chaîne de requête car je l'utilisais déjà pour envoyer des informations avec httpClient. mais vous pouvez simplement le construire vous-même.
et le
this._router.url.split("?")[0]
, est de supprimer toute la chaîne de requête précédente de l'url actuelle.la source
this.location.path().split...
mieux?J'ai fini par combiner
urlTree
aveclocation.go
Je ne sais pas si cela
toString
peut causer des problèmes, mais malheureusementlocation.go
, cela semble être basé sur une chaîne.la source
Si vous souhaitez modifier les paramètres de requête sans modifier l'itinéraire. voir ci-dessous l'exemple pourrait vous aider: la route actuelle est: / search & La route cible est (sans la page de rechargement): / search? query = love
Veuillez noter: vous pouvez utiliser this.router.navigate (['search'] au lieu de this.router.navigate (['.']
la source
relativeTo:
, mais cela a.then()
été utile - je ne savais pas que naviguer () a renvoyé une promesse, je suis ravi que vous ayez posté!Tout d'abord, nous devons importer le module de routeur du routeur angulaire et déclarer son nom d'alias
1. Vous pouvez modifier les paramètres de requête en utilisant la fonction "router.navigate" et transmettre les paramètres de requête
Il mettra à jour les paramètres de requête dans l'itinéraire actuel, c'est-à-dire activé
Le ci-dessous redirigera vers la page abc avec _id, jour et nom comme paramètres de requête
this.router.navigate (['/ abc'], {queryParams: {_id: "abc", jour: "1", nom: "dfd"}});
Il mettra à jour les paramètres de requête dans l'itinéraire "abc" avec trois paramètres de requête
Pour récupérer les paramètres de requête: -
la source