vuejs3 中子路由的奇怪行为

strange behaviour with child route in vuejs3

提问人:bluelemonade 提问时间:11/15/2023 最后编辑:bluelemonade 更新时间:11/15/2023 访问量:20

问:

当我使用子路由时,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);

为什么孩子没有被展示出来......

vue.js 路由 vuejs3

评论


答:

0赞 yoduh 11/15/2023 #1

您的子路由当前设置为在路径为 和 时匹配(或者它们会匹配,因为它们不应该在前面加上任何一个)。查看 Vue Router 文档中关于嵌套路由的内容/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

评论

0赞 bluelemonade 11/15/2023
不幸的是,这没有帮助,/ 总是加载的。
0赞 yoduh 11/15/2023
不知道你说的“/总是加载”是什么意思。怎么会这样?另外,可能应该早点问,但是组件的模板中是否有?这是显示嵌套路由组件的唯一方法。您可能希望在问题中显示此代码。HomeView<router-view />
0赞 bluelemonade 11/15/2023
“/”表示默认路径。谢谢,这是错误,路由器视图甚至没有在正确的视图中。