1.router (三级路由)
import { createRouter,createWebHistory } from 'vue-router'
export let constom = [
// 只要新建一个页面组件,就需要添加一个路由配置。
{
path:'/',
name:"Home",
component:()=>import('@/page/Home.vue')
}, {
// 注意:params参数,传参个数上要求严格,不然无法匹配路由
path:'/shopcar/:id/:title',// params参数
name:"ShopCar",
component:()=>import('@/page/ShopCar.vue')
}, {
path:'/mine',
name:"Mine",
component:()=>import('@/page/Mine.vue')
},{//一级路由
path:"/about",
name:'About',
redirect:'/about/first',//重定向 少使用 当url地址变为/about,自动修改为 /about/first
component:()=>import('@/page/About.vue'),
children:[//二级路由 (嵌套路由)
{
//bug:注意 path:'/first'
// path:'/about/first',//全写
path:'first', // /about/first
name:'AboutFirst',
component:()=>import('@/page/First.vue'),
},{
path:'second',
name:'AboutSecond',
component:()=>import('@/page/Second.vue')
},{
path:'third',
name:'AboutThird',
redirect:'/about/third/fer',
component:()=>import('@/page/Third.vue'),
children:[//三级路由
{
path:'fer',
name:'AboutThirdFer',
component:()=>import('@/page/Fer.vue')
},{
path:'tao',
name:'AboutThirdTao',
component:()=>import('@/page/Tao.vue')
}
]
}
]
}
]
let router = createRouter({
history:createWebHistory(),
routes:constom,
linkActiveClass: 'router-active', // 自定义被激活路由的class类名 默认名router-link-active
linkExactActiveClass:'router-exact-active',// 自定义精准激活router-link的class类名 默认 router-link-exact-active
})
export default router
注意:app.vue中RouterView 只渲染 当前router-link 加载的路由组件 二级三级路由不管,需要在二三级路由的各自父级路由中再次渲染。
现在要把keepAlive写在router-view里面,使用作用域插槽获得页面组件
<router-view v-slot="slotProps">
<keep-alive>
<component :is="slotProps.Component"></component>
</keep-alive>
</router-view>
这样就相当于缓存了所有页面
slotProps其实是一个对象,所以也可以用对象解构的语法
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component"></component>
</keep-alive>
</router-view>
这样写简洁一点
下一步就要用上我们meta里面配置的keepAlive
<router-view v-slot="{ Component }">
<keep-alive>
<component :is="Component" v-if="$route.meta.keepAlive" :key="$route.name"></component>
</keep-alive>
<component :is="Component" v-if="!$route.meta.keepAlive" :key="$route.name">></component>
</router-view>
更详细:里面有vue2语法写的解决办法