Il est vrai que les routes ne fonctionnent pas avec les chaînes de requête, mais cela ne signifie pas que vous ne pouvez pas utiliser les chaînes de requête pour transmettre des données entre les pages lorsque vous changez de route ! La limitation flagrante des paramètres de route est qu'ils ne peuvent pas être mis à jour sans recharger la page. Parfois, cela n'est pas souhaité, par exemple après avoir enregistré un nouvel enregistrement. Le paramètre de route original était un 0 (pour signifier un nouvel enregistrement), et vous voulez maintenant le mettre à jour avec l'ID correct renvoyé par ajax de sorte que si l'utilisateur rafraîchit la page, il voit son nouvel enregistrement sauvegardé. Il n'y a aucun moyen de faire cela avec les paramètres de route, mais cela peut être accompli en utilisant des chaînes de requête à la place.
Le secret consiste à ne pas inclure la chaîne de requête lors de la modification de l'itinéraire, car elle ne correspondrait pas au modèle d'itinéraire. Ce que vous pouvez faire, c'est modifier l'itinéraire, puis appliquer les paramètres de la chaîne d'interrogation. En gros,
$location.path('/RouteTemplateName').search('queryStringKey', value).search( ...
La beauté de la chose, c'est que le service $routeParams traite les valeurs des chaînes de requête de la même manière que les vrais paramètres de route. Vous n'aurez donc même pas à mettre à jour votre code pour les traiter différemment. Vous pouvez maintenant mettre à jour les paramètres sans recharger la page en incluant reloadOnSearch : false dans la définition de votre itinéraire.