vue3的 keep-alive 使用,以及activated钩子 和 vue-router中的 scrollBehavior的使用
先上代码
<router-view v-slot="{ Component }">
<keep-alive>
<component :key="$route.name" :is="Component" v-if="$route.meta.keepAlive" />
</keep-alive>
<component :key="$route.name" :is="Component" v-if="!$route.meta.keepAlive" />
</router-view>
const routes = [
{
path: '/',
redirect: '/home',
},
// Home
{
path: '/home',
name: 'Home',
meta: {
keepAlive: true,
},
component: Home
},
// Detail
{
path: '/detail',
name: 'Detail',
meta: {
keepAlive: false,
},
component: () => import('@/views/detail/index.vue'),
},
...
]
const router = createRouter({
history: createWebHashHistory(),
routes,
})
vue2的keep-alive 参考
<keep-alive include="Home,Ranking">
<router-view />
</keep-alive>
vue3 使用注意点:
报错:parentComponent.ctx.deactivate is not a function :
需要在 <component :key="$route.name" ... />
keep-alive相关的钩子函数: activated / deactivated
https://v3.cn.vuejs.org/api/options-lifecycle-hooks.html#activated
onActivated(() => {
})
onDeactivated(() => {
})
vue3中 vue-router 的scrollBehavior变化
https://router.vuejs.org/zh/guide/advanced/scroll-behavior.html
const router = createRouter({
history: createWebHashHistory(),
routes,
scrollBehavior(to, from, savedPosition) {
if (to.name === 'Detail') {
return { x: 0, y: 0 };
}
return savedPosition;
}
});
改为:
const router = createRouter({
history: createWebHashHistory(),
routes,
scrollBehavior(to, from, savedPosition) {
if (to.name === 'Detail') {
return { top: 0 };
}
return savedPosition;
}
});
vue3中 vue-router 的使用
import { useRoute, useRouter } from 'vue-router';
const route = useRoute();
const router = useRouter();
const { id } = route.query;
const clickToRouteDetail = (id) => {
router.push({
path: './detail',
query: {
id,
},
});
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了