recherche

Maison  >  Questions et réponses  >  le corps du texte

Nuxt3 - La structure des pages imbriquées ne fonctionne pas correctement

Je voulais imbriquer des routes dans NUXT 3, j'ai donc créé cette structure de fichiers/dossiers (affichant uniquement les parties avec lesquelles j'ai des difficultés) :

- Pages
   - Admin
     - Index.vue
     - Users
       - Index.vue
       - OtherRoute.vue

Cette structure de dossiers fonctionne bien lorsque je navigue via - Je peux accéder à des pages comme celle-ci :

- domain.com/admin (Pages/Admin/index.vue)
- domain.com/admin/users (Pages/Admin/Users/index.vue)
- domain.com/admin/users/otherRoute (Pages/Admin/Users/otherRoute.vue)

Le problème est que lorsque je recharge la page ou que j'accède directement à l'url domain.com/admin/users NUXT, cela la change en domain.com/admin/admin-users

Pour une raison quelconque, NUXT ne peut pas résoudre cette URL lorsqu'il est accessible directement plutôt que via NuxtLink et génère une erreur 404. Existe-t-il un moyen d'avoir une structure de page comme celle-ci et de résoudre les changements de chemin inattendus ?

Modifier 1 Vidéo de ce qui s'est passé

Edit 2

Page Users.vue

<template>
    <TitleH1>Users</TitleH1>
    <TileList :tiles='tiles'></TileList>
</template>

<script setup>
    definePageMeta({
        layout: "logged",
    });

    const tiles = [
        {title: 'Users', icon: 'ic:baseline-supervisor-account', to: '/admin/users'},
        {title: 'Roles', icon: 'material-symbols:lock-person', to: '/admin/roles'},
        {title: 'Units', icon: 'ph:tree-structure', to: '/admin/units'},
    ]
</script>

logged.vue(mise en page)

<template>
    <NavigationMain :key="$route.name" />
    <div class="flex">
        <NavigationSide />
        <div class="w-full">
            <div class="px-4 md:mx-auto xl:px-36">
                <Breadcrumb />
                <slot></slot>
            </div>
            <NotificationHub />
        </div>
    </div>
</template>

auth.global.js (le seul middleware fonctionnant sur cette page)

export default defineNuxtRouteMiddleware(async (to, from) => {
    const { isLogged, proceedAutoLogin } = useAuthStore();
        if (!isLogged){
            if (to.name !== 'login'){
                if (await proceedAutoLogin()){
                    return navigateTo(to.name)
                }else{
                    abortNavigation()
                    return navigateTo('/login')
                } 
            }
        }else{
            if (!await proceedAutoLogin()){
                abortNavigation()
                return navigateTo('/login')
            }
        }
  })

Merci

P粉842215006P粉842215006241 Il y a quelques jours412

répondre à tous(1)je répondrai

  • P粉821231319

    P粉8212313192024-03-28 19:13:26

    Selon l'astuce de @ReaganM, l'erreur réside dans le middleware :

    export default defineNuxtRouteMiddleware(async (to, from) => {
        const { isLogged, proceedAutoLogin } = useAuthStore();
            if (!isLogged){
                if (to.name !== 'login'){
                    if (await proceedAutoLogin()){
                        return navigateTo(to.name)
                    }else{
                        abortNavigation()
                        return navigateTo('/login')
                    } 
                }
            }else{
                if (!await proceedAutoLogin()){
                    abortNavigation()
                    return navigateTo('/login')
                }
            }
      })

    Je redirige vers to.name,问题是嵌套路由的名称在我的情况下是像Folder-File那样构建的Admin-Users 。因此,我更改了这部分代码并重定向到 to.path et ça fonctionne très bien.

    Middleware final

    export default defineNuxtRouteMiddleware(async (to, from) => {
        const { isLogged, proceedAutoLogin } = useAuthStore();
            if (!isLogged){
                if (to.name !== 'login'){
                    if (await proceedAutoLogin()){
                        console.log(to)
                        return navigateTo(to.path)
                    }else{
                        abortNavigation()
                        return navigateTo('/login')
                    } 
                }
            }else{
                if (!await proceedAutoLogin()){
                    abortNavigation()
                    return navigateTo('/login')
                }
            }
      })

    répondre
    0
  • Annulerrépondre