Если вы используете свойство children
маршрута, все дочерние маршруты монтируются в родительский компонент . В вашем случае это означает, что он установлен в shop.vue
. Чтобы иметь возможность монтировать компонент в родительском компоненте, родительский компонент должен содержать элемент <router-view />
.
Возьмем, к примеру, следующие компоненты:
<!-- App.vue -->
<template>
<div id="app">
<span>Start App.vue</span>
<router-view/>
<span>End App.vue</span>
</div>
</template>
<!-- ParentComponent.vue -->
<template>
<div class="parent-component">
<span>Start Parent component</span>
<router-view/>
<span>End Parent component</span>
</div>
</template>
<!-- Child1.vue -->
<template>
<div class="comp-child1">Child1.vue</div>
</template>
Кроме того, у нас есть следующий маршрутизатор:
// router.js
import Vue from "vue";
import VueRouter from "vue-router";
import ParentComponent from "./components/ParentComponent";
import Child1 from "./components/Child1";
import Child2 from "./components/Child2";
Vue.use(VueRouter);
const routes = [
{
path: "/",
component: ParentComponent,
children: [
{
path: "",
redirect: "/child1"
},
{
path: "child1",
component: Child1
},
{
path: "child2",
component: Child2
}
]
}
];
export default new VueRouter({
routes
});
В этом случае App.vue является корневым компонентом, поскольку он определен в main.js. Маршрутизатор сообщает, что child1
является дочерним маршрутом от /
, который отображает компонент ParentComponent
. Поэтому мы увидим начало и конец app.vue. Вложив туда, мы увидим начало и конец ParentComponent. Затем, вложенный внутрь этого, мы видим Child1. Без router-view
ни в одном из этих компонентов не было бы места для их детей.