Je crée une application Angular dans laquelle la plupart des routes se rapportent à un projet donné et contiennent un ID de projet. Dans la zone de navigation supérieure se trouvera une liste déroulante de projets. Lorsque l'utilisateur sélectionne un projet dans la liste déroulante, il doit naviguer vers l'itinéraire actuel, mais avec le projectId remplacé par la nouvelle valeur.Remplacez génériquement le paramètre de route Angular 2 et naviguez
Ceci est très similaire à Angular navigate to url by replacing an existing parameter, cependant leur réponse acceptée a utilisé des paramètres de requête; Cela doit fonctionner sur les paramètres de route requis. Le projectId peut également apparaître dans différentes positions au sein de l'itinéraire, de sorte que cela doit génériquement être capable d'échanger un paramètre de route par son nom.
donc hypothétiquement je pourrais avoir les routes suivantes:
project/:projectId/details
dashboard/status/:projectId/:year/:month/:day
admin/projects/:projectId
admin/contacts/:projectId/settings
admin/generalSettings
Ces itinéraires sont fictifs, mais démontrent que le projectId peut apparaître dans diverses positions et ne seront pas précédés d'un mot spécifique (je ne peux pas, par exemple chercher un segment nommé "projet" puis saisissez le segment suivant).
Conceptuellement, je voudrais
- Prenez du routeur la route actuelle et des cartes de l'itinéraire params (comme paramMap), paramètres de requête, et la matrice params
- Modifiez les valeurs dans les cartes si nécessaire, à savoir si le paramMap contient "projectId" puis le mettre à jour.
- Remettez la route et les cartes au routeur pour y naviguer.
Il semble donc conceptuellement simple, mais quand je regarde routerState et son arbre de routes du routeur (que je ne comprends pas tout à fait) et la méthode Router.navigate, je ne vois pas comment atteindre cet objectif . Je n'ai pas de problème avec l'arbre de route pour reconstruire l'itinéraire, tant que 1) cela peut être fait de manière générique sans aucune connaissance de la structure de route de l'application, et 2) l'itinéraire résultant est identique à l'itinéraire original (y compris les paramètres de requête et de matrice) autre que la modification du paramètre de route ciblée (projectId).