使用 Vue Router 在 Vue 中发布渲染子视图
Issue rendering child views in Vue with Vue Router
我无法在 Vue 中呈现我的子视图。
我的 main.js 文件看起来像这样
import DashboardProducts from './components/Dashboard/DashboardProducts'
import DashboardSettings from './components/Dashboard/DashboardSettings'
Vue.use(VueRouter)
Vue.use(Vuex)
const routes = [
{ path: '/activate', component: Activate },
{ path: '/dashboard/:view', component: Dashboard,
children: [
{ path: 'products', component: DashboardProducts },
{ path: 'settings', component: DashboardSettings }
]
},
{ path: '/login', component: Login },
{ path: '/account', component: UserAccount }
];
const router = new VueRouter({
routes // short for routes: routes
});
export default router;
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
render: h => h(App)
});
如您所见,我已经导入了组件并且没有出现任何错误。我还将它们添加为 Dashboard 的子项并设置它们的路径。
在我的Dashboard.vue视图中,我这样做
<template>
<div>
<dashboard-nav></dashboard-nav>
<!-- Will display product and settings components -->
<router-view></router-view>
</div>
</template>
<script>
import DashboardNav from '../components/Dashboard/DashboardNav'
export default {
name: 'Dashboard',
components: {
DashboardNav
}
};
</script>
<style>
</style>
网址匹配,但没有组件呈现。我错过了什么?
这是一个 JSFiddle,几乎包含了我想要的东西 https://jsfiddle.net/dtac5m11/
它在那里似乎工作正常,但我也在我的应用程序中使用单个文件组件,所以它可能有点不同?
同样,问题是让子组件在它们的路由匹配时呈现。目前没有组件正在安装。
更新:
我正在让 DashboardProducts
组件呈现,但无法让 DashboardSettings
呈现。
谢谢!
{ path: '/dashboard/:view', component: Dashboard,
首先,您在仪表板路径后添加 :view 的目的是什么?如果您将这个用于子路径作为参数,这是一个问题。这就是为什么您的子组件未呈现的原因。因为, :view 用于动态路由。 /dashboard/:view 等同于 /dashboard/* ,表示 /dashboard 之后可以有任意路由,该路由会渲染 Dashboard 组件。您的子路径 /dashboard/products 和 /dashboard/settings 将始终匹配 /dashboard/:view 并呈现父组件-Dashboard。
因此,在您的情况下,子组件的路由是已知的。所以你不需要使用 :view。
更多,https://router.vuejs.org/en/essentials/dynamic-matching.html.
我无法在 Vue 中呈现我的子视图。
我的 main.js 文件看起来像这样
import DashboardProducts from './components/Dashboard/DashboardProducts'
import DashboardSettings from './components/Dashboard/DashboardSettings'
Vue.use(VueRouter)
Vue.use(Vuex)
const routes = [
{ path: '/activate', component: Activate },
{ path: '/dashboard/:view', component: Dashboard,
children: [
{ path: 'products', component: DashboardProducts },
{ path: 'settings', component: DashboardSettings }
]
},
{ path: '/login', component: Login },
{ path: '/account', component: UserAccount }
];
const router = new VueRouter({
routes // short for routes: routes
});
export default router;
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
store,
render: h => h(App)
});
如您所见,我已经导入了组件并且没有出现任何错误。我还将它们添加为 Dashboard 的子项并设置它们的路径。
在我的Dashboard.vue视图中,我这样做
<template>
<div>
<dashboard-nav></dashboard-nav>
<!-- Will display product and settings components -->
<router-view></router-view>
</div>
</template>
<script>
import DashboardNav from '../components/Dashboard/DashboardNav'
export default {
name: 'Dashboard',
components: {
DashboardNav
}
};
</script>
<style>
</style>
网址匹配,但没有组件呈现。我错过了什么?
这是一个 JSFiddle,几乎包含了我想要的东西 https://jsfiddle.net/dtac5m11/
它在那里似乎工作正常,但我也在我的应用程序中使用单个文件组件,所以它可能有点不同?
同样,问题是让子组件在它们的路由匹配时呈现。目前没有组件正在安装。
更新:
我正在让 DashboardProducts
组件呈现,但无法让 DashboardSettings
呈现。
谢谢!
{ path: '/dashboard/:view', component: Dashboard,
首先,您在仪表板路径后添加 :view 的目的是什么?如果您将这个用于子路径作为参数,这是一个问题。这就是为什么您的子组件未呈现的原因。因为, :view 用于动态路由。 /dashboard/:view 等同于 /dashboard/* ,表示 /dashboard 之后可以有任意路由,该路由会渲染 Dashboard 组件。您的子路径 /dashboard/products 和 /dashboard/settings 将始终匹配 /dashboard/:view 并呈现父组件-Dashboard。 因此,在您的情况下,子组件的路由是已知的。所以你不需要使用 :view。 更多,https://router.vuejs.org/en/essentials/dynamic-matching.html.