Vue Router tente de faire correspondre les routes en utilisant des paramètres comme noms.
P粉826429907
2023-07-27 21:18:01
<p>J'essaie d'utiliser des paramètres dans mes itinéraires et j'ai créé l'itinéraire suivant. </p>
<pre class="brush:php;toolbar:false;">export const ConsumerRoutes = [
{
chemin : '/' + import.meta.env.VITE_MODULE_ADMIN_NAME + '/consumers',
méta : {
nécessiteAuth : vrai,
adminLayout : vrai,
module : 'admin',
icône : UserCircleIcon,
nav: 'Consommateurs'
},
enfants: [
{
chemin: '',
nom : « Consommateurs »,
composant : () => import('../../views/admin/Consumer.vue'),
},
{
chemin : ':id',
nom : 'Détails du consommateur',
composant : () => import('../../views/admin/ConsumerDetails.vue'),
}
],
},
// {
// chemin : '/' + import.meta.env.VITE_MODULE_ADMIN_NAME + '/consumers/:id',
// méta : {
// nécessiteAuth : vrai,
// adminLayout : vrai,
// module : 'admin',
// exclureFromNav : vrai
// },
// enfants: [
// {
// chemin: '',
// nom : 'Détails du consommateur',
// composant : () => import('../../views/admin/ConsumerDetails.vue'),
// }
// ]
// }
];≪/pré>
<p>Lorsque j'essaie de saisir /1 dans l'URL, je peux accéder aux consommateurs, mais j'obtiens l'erreur suivante. </p>
<pre class="brush:php;toolbar:false;">vue-router.mjs:810 Non capturé (promis) Erreur : aucune correspondance pour
{"name":"1","params":{}}</pre>
<p>Cependant, si j'utilise console.log dans la fonction afterEach pour imprimer mon itinéraire cible, j'obtiens l'objet itinéraire suivant. </p><p>Il sait donc vers quel itinéraire je vais, mais pour une raison quelconque, il utilise « 1 » pour essayer de trouver un itinéraire nommé « 1 ». Si je change le nom de mon itinéraire en 1, il se charge correctement. </p><p>J'ai essayé de diviser mes routes des routes enfants en routes indépendantes, mais cela n'a rien changé. </p><p><br /></p>
<heure />
<p>Le problème a été résolu et n'a rien à voir avec les itinéraires que j'ai définis. </p>
Le problème que vous rencontrez peut être dû au fait que Vue Router essaie de faire une correspondance en fonction du nom de l'itinéraire plutôt que du chemin.
Vous essayez d'accéder à /consumers/1, en vous attendant à ce que "1" soit un paramètre d'itinéraire (:id). Mais Vue Router interprète "1" comme nom de route, d'où le message d'erreur que vous voyez.
Assurez-vous de naviguer en utilisant le chemin de l'itinéraire et non le nom de l'itinéraire. Dans votre hook afterEach, utilisez le code suivant :
Lors de la navigation manuelle, utilisez le chemin («/consumers/1»), pas le nom. Si vous rencontrez toujours des problèmes, cela est probablement dû à une autre partie de votre code.
Voici un exemple de code pour accéder à un itinéraire par son nom :
Voici également un exemple de code pour naviguer vers un itinéraire par chemin :
Ça devrait être utile