遇到这个问题的基本上应该跟我遇到的情况一样,但是这个问题很隐蔽,老手不会遇到,新人说不清楚,所以爬坑之后来提一下。
父子路由是嵌套关系,所以不能跳过父组件直接显示子组件。例如我有如下index.js:``
import Vue from 'vue'
import VueRouter from 'vue-router'
//引入两个组件
import recomView from '../components/views/ty/recom/view.vue'
import recomEdit from '../components/views/ty/recom/edit.vue'
Vue.use(VueRouter)
//建立router
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/recom',
children: [
{
path: 'view',
name: 'recomView',
component: recomView
},
{
path: 'edit',
name: 'recomEdit',
component: recomEdit
}
]
},
//暴露router,export default方式暴露出的模块在导入时可以起任何名(不冲突的情况下)
export default router
在某个组件XXX.vue中,我想把recomView和recomEdit两个组件导入,
……
……
然而使用上面的index.js,会发现无论如何也无法引入。原因在于引入的时候跳级了。回头看上面index.js,不妥之处很多,慢慢分析一下
component: recomView
,会发现你原本指向recomView和recomEdit的两个路由都会显示recomView到这里,解决方法就比较容易想到了,那就是再建立一个组件recom.vue对应父级路由,在recom.vue中再引入一次router-view就行了。
//recom.vue,鉴于我这里并不需要这个'/recom'页面,所以以最简单的方式引入router-view就可以了
那还有没有更简单的不需要建立recom.vue方法呢?有。
在index.js中直接引入const recom = {template: `
就行了。修正后的index.js应该是这样的:
import Vue from 'vue'
import VueRouter from 'vue-router'
//引入两个组件
import recomView from '../components/views/ty/recom/view.vue'
import recomEdit from '../components/views/ty/recom/edit.vue'
Vue.use(VueRouter)
//引入recom组件!
const recom = {
template: ` `
}
//建立router
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/recom',
component: recom, //引入recom,必不可少
children: [
{
path: 'view',
name: 'recomView',
component: recomView
},
{
path: 'edit',
name: 'recomEdit',
component: recomEdit
}
]
},
export default router
那还有没有其他的办法呢?也有。那就是不要用嵌套路由,直接把子路由升到跟父路由同级就行了,反正你这里又不需要父路由对应的组件,然后给父路由设置一个redirect指向你想默认显示的页面,这个相信都会,就不写了。这也是我一开始想到的办法,但是上面的bug没解决心里不舒服,所以耽误了点时间,不过还好,勉强算是找到原因了。
感觉JS是个很灵活的语言,像我这种半路出家什么书都没看直接开始做web的,真的要抽时间好好补补基础了。