在vuejs3中使用子路由的奇怪行为

42fyovps  于 2023-11-21  发布在  Vue.js
关注(0)|答案(1)|浏览(182)

当我使用子路由时,我遇到了vue3路由器的问题。子路由显示在主页上的一个组件中,这个InfoLayer.vue组件只有在某些时候才可见,这取决于商店中的标志。
大致的路由器:

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
import IntroView from '../gameviews/IntroView.vue'
import PuzzleView from '../gameviews/PuzzleView.vue'

var routes = [

   {
     path: "/homepage",
     name: "homepage",
     component: HomeView,
     children: [
                 {
                   path: '/homepage/intro',
                   name: "intro",
                   component: IntroView
                 },
                 {
                   path: '/homepage/puzzle',
                   name: "puzzle",
                   component: PuzzleView
                 }
 
     ]
   }, ...

字符串
当然,项目中还有更多的路由,它们都工作得很好。只有子路由不工作,总是显示主页视图,而不是介绍或谜题。没有错误消息,即使显示错误的视图也能工作。
layer.vue组件中的部分看起来像这样:

<router-view v-slot="{ Component }">
                 <transition name="slidefade" appear mode="out-in" >
                     <component :is="Component" class="animated" :key="route.path" />
                 </transition>
               </router-view>


即使是加载IntroLayer组件时的额外推送,也始终会加载主页

onMounted(() => {

       setTimeout(() => {
         router.push( {path:"/homepage/puzzle"} );
       }, 2000);


为什么不给孩子看

ifmq2ha2

ifmq2ha21#

您的子路由当前设置为当路径分别为/homepage/homepage/intro/homepage/homepage/puzzle时匹配(或者它们会匹配,因为它们也不应该前缀为/)。
将子路由路径视为父路径的 * 扩展 *。
你想像这样定义你的路由:

{
  path: '/homepage',
  name: 'homepage',
  component: HomeView,
  children: [
    {
      path: 'intro',
      name: 'intro',
      component: IntroView
    },
    {
      path: 'puzzle',
      name: 'puzzle',
      component: PuzzleView
    }
  ]
}

字符串
因此,当路径分别为/homepage/intro/homepage/puzzle时,子路由将匹配。

相关问题