当前位置: 首页 > news >正文

keep-alive缓存文章列表案例完整代码(Vue3)

keep-alive缓存文章列表案例完整代码(Vue3)

  • 环境准备
  • 目录结构
  • 完整代码
    • main.js
    • App.vue
    • ArticleList.vue
    • ArticleDetail.vue
    • router.js
  • vue2 版本

环境准备

创建一个项目

vue create 项目名

也可以用 vite

npm create vite@latest 项目名 --template vue

安装 vue router

npm install vue-router@4

目录结构

在这里插入图片描述

完整代码

main.js

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";createApp(App).use(router).mount("#app");

App.vue

这里和vue2一样也有两种写法,可以看 keep-alive缓存文章列表案例完整代码(Vue2)
这边就用第二种。

<template><RouterView v-slot="{ Component }"><KeepAlive><component :is="Component" v-if="route.meta.keepAlive" /></KeepAlive><component :is="Component" v-if="!route.meta.keepAlive" /></RouterView>
</template>
<script setup>
import { useRoute } from "vue-router";
const route = useRoute();
</script>

ArticleList.vue

<script setup>
import {onMounted,onActivated,onDeactivated,ref,nextTick,onUnmounted,
} from "vue";const articles = ref([]);
const scrollTop = ref(0);function fakeFetch() {return Array.from({ length: 100 }, (_, i) => ({id: i + 1,title: "文章标题 " + (i + 1),}));
}function handleScroll() {scrollTop.value = window.scrollY || document.documentElement.scrollTop;// console.log("滚动位置:", scrollTop.value);
}onMounted(() => {// console.log("mounted:" + scrollTop.value);articles.value = fakeFetch();window.addEventListener("scroll", handleScroll);
});//onUnmounted(() => {
//  console.log("unmounted"); // 有就说明没缓存成功
//});onActivated(() => {nextTick(() => {// console.log("activated:", scrollTop.value);window.scrollTo(0, scrollTop.value);});window.addEventListener("scroll", handleScroll);
});onDeactivated(() => {// console.log("deactivated:", scrollTop.value);window.removeEventListener("scroll", handleScroll);
});
</script><template><div><div v-for="item in articles" :key="item.id" class="item"><router-link :to="{ name: 'ArticleDetail', query: { id: item.id } }">{{ item.title }}</router-link></div></div>
</template><style>
.item {padding: 16px;border-bottom: 1px solid #eee;
}
</style>

ArticleDetail.vue

<script setup>
import { onMounted } from "vue";
import { useRoute } from "vue-router";// 获取路由信息
const route = useRoute();onMounted(() => {// 模拟请求内容// console.log("详情页 mounted,ID:", route.query.id);
});
</script><template><div><h2>文章详情 {{ route.query.id }}</h2><p>内容详情...</p><router-link to="/list">返回列表</router-link></div>
</template>

router.js

import { createRouter, createWebHistory } from "vue-router";
import ArticleList from "@/components/ArticleList.vue";
import ArticleDetail from "@/components/ArticleDetail.vue";const routes = [{path: "/list",name: "ArticleList",component: ArticleList,meta: { keepAlive: true },},{path: "/detail",name: "ArticleDetail",component: ArticleDetail,meta: { keepAlive: false },},
];const router = createRouter({history: createWebHistory(),routes,
});export default router;

vue2 版本

keep-alive缓存文章列表案例完整代码(Vue2)

http://www.lqws.cn/news/449353.html

相关文章:

  • Symbol.iterator 详解
  • 《被讨厌的勇气》详细概述
  • 【大数据】java API 进行集群间distCP 报错unresolvedAddressException
  • vue3打包后,图片丢失
  • 【unity游戏开发——热更新】什么是Unity热更新
  • 【精选】基于SpringBoot的宠物互助服务小程序平台开发 微信小程序宠物互助系统 宠物互助小程序平台设计与实现 支持救助发布+领养申请+交流互动功能
  • 无人机不再“盲飞”!用Python搞定实时目标识别与跟踪
  • 【Linux驱动开发 ---- 4.2_平台设备(Platform Devices)概述】
  • 1.容器技术与docker环境部署
  • phpstudy无法启动mysql,一启动就关闭,完美解决
  • PLuTo 编译器示例9-12
  • 从生活场景学透 JavaScript 原型与原型链
  • 力扣-62.不同路径
  • 【MySQL篇08】:undo log日志和MVCC实现事务隔离
  • 【小程序】如何生成特定页面的小程序码
  • apifox接收流式响应无法自动合并json内容
  • 组态王工程运行时间显示
  • 数据库从零开始:MySQL 中的 DDL 库操作详解【Linux版】
  • 大话软工笔记—业务功能分类
  • 青少年编程与数学 01-012 通用应用软件简介 03 图像处理软件
  • VR 看房:突破成长痛点,展望未来趋势
  • OPENGLPG第九版学习 - 纹理与帧缓存 part1
  • 【笔记】解决部署国产AI Agent 开源项目 MiniMax-M1时 Hugging Face 模型下载缓存占满 C 盘问题:更改缓存位置全流程
  • 【Python进阶系列】第10篇:Python 项目的结构设计与目录规范 —— 从脚本到模块,从混乱到整洁
  • Flutter Hero 组件详解及应用
  • 定位接口偶发超时的实战分析:iOS抓包流程的完整复现
  • dify本地部署及添加ollama模型(ubuntu24.04)
  • wsl2 ubuntu22 安装 systemd
  • GitHub 趋势日报 (2025年06月19日)
  • 学习路之uniapp--uniapp扩展uni-ui