Дополнительное вложенное не отображает представление из дочернего маршрута

#vue.js #vue-router

Вопрос:

Я настроил новый проект Vue3 с маршрутизацией. Внутри src я создаю новый каталог «foo» с Index.vue

     <template>
      <div>
        <div>Foo</div>
        <router-view />
      </div>
    </template>
 

и подкаталог «представления» с Home.vue

     <template>
      <div>Bar</div>
    </template>
 

Внутри каталога foo я также настраиваю router.js , где я регистрирую все представления для этой функции

     import Index from "./Index.vue";
    import Home from "./views/Home.vue";
    
    const featureRoute = {
      path: "/foo",
      component: Index,
      children: [
        {
          path: "/",
          component: Home,
        },
      ],
    };
    
    export default router => {
      router.addRoute(featureRoute);
    };
 

Внутри основного файла маршрутизатора я изменяю код на

     import { createRouter, createWebHistory } from "vue-router";
    
    import registerFooRouter from "../foo/router";
    
    const routes = [
      {
        path: "/",
        redirect: "/foo",
      },
    ];
    
    const router = createRouter({
      history: createWebHistory(process.env.BASE_URL),
      routes,
    });
    
    registerFooRouter(router);
    
    export default router;
 

То App.vue :

     <template>
      <router-view />
    </template>
 

Чего я ожидаю:

При запуске приложения я перенаправляюсь на /foo него . Он отобразит a div с содержимым «Foo», а ниже-другое div с содержимым «Панель».

Что происходит:

Перенаправление работает нормально. Но, к сожалению, все, что я вижу, — это div содержимое «Foo». Второй div с содержимым «Панель» отсутствует.


Так что, похоже, он не может отобразить Home.vue файл.

Кто-нибудь знает, чего здесь не хватает?

Ответ №1:

path: "/", внутренние дочерние элементы интерпретируются маршрутизатором Vue как корневой путь. Если вы хотите отобразить что-то «по умолчанию» внутри маршрута «/foo», используйте пустую строку:

 const featureRoute = {
  path: "/foo",
  component: Index,
  children: [
    {
      path: "",
      component: Home,
    },
  ],
};
 

Проверьте последний пример в документах