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

vue3 keepalive翻页保存页面状态

描述

实现页面 A-> B , B->A(A保存之前页面状态,不刷新页面)

// router/index.tsimport { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'home',component: HomeView,// 默认选择第一个子路由redirect:'/index',children:[{path: 'index',name: 'FirstViews',component: () => import('@/components/FirstViews.vue'),// meta: { keepAlive: false,} // 组件需要缓存},{path: 'modelShowing',name: 'MainTag',component: () => import('@/components/MainTag.vue'),// meta: { keepAlive: true,} // 组件需要缓存 (可有可无,我这里没有影响)},{path: 'projectShowing',name: 'MainTagProject',component: () => import('@/components/MainTagProject.vue'),// meta: { keepAlive: false,} // 组件需要缓存}]},{path: '/about',name: 'about',component: () => import('../views/AboutView.vue'),// meta: { keepAlive: false,} // 组件需要缓存},{path: '/models3DShow',name: 'models3DShow',component: () => import('@/components/models3DShow.vue'),// meta: { keepAlive: false,} // 组件需要缓存}],scrollBehavior(to,from,savedPosition) {return {top : 0}}
})export default router
//App.vue<script setup lang="ts">
import {RouterLink, RouterView, useRoute, useRouter} from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
import {defineComponent, onMounted, watch} from 'vue'
import { ElConfigProvider } from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import MainTag from "@/components/MainTag.vue";
import {usekeepaliveStateStore} from "@/stores/keepaliveState";
import {ref} from "vue";
const  locale = ref(zhCn)
const tag = ref('MainTag')
const keepaliveState = usekeepaliveStateStore()
let includeList = ref([])
let router = useRouter()
let route = useRoute()onMounted(()=>{
})watch(()=> route.name,(newValue, oldValue)=>{//从组织架构进入文章列表,默认文章列表是缓存的console.log(newValue, oldValue)console.log(keepaliveState.useKeepaliveState)})
</script><template><el-config-provider :locale="locale">
<!--    <RouterView></RouterView>--><router-view v-slot="{ Component, route }"><keep-alive :include="keepaliveState.useKeepaliveState"><component :is="Component" :key="route.path"/></keep-alive></router-view></el-config-provider>
</template>
// store/keepaliveState.tsimport { defineStore } from "pinia";
import {ref} from "vue";export const usekeepaliveStateStore = defineStore('keepaliveState',() =>{const useKeepaliveState = ref(['MainTag','home']) // 重点 要有 homefunction increment(data){useKeepaliveState.value = data}function deletes(pathName){useKeepaliveState.value.indexOf(pathName) > -1 && useKeepaliveState.value.splice(useKeepaliveState.value.indexOf(pathName), 1)}function adds(pathName) {useKeepaliveState.value.indexOf(pathName) == -1 && useKeepaliveState.value.push(pathName)}return { useKeepaliveState, increment,deletes,adds }
})
// HomeView.vue
<script lang="ts" setup>
import { defineComponent } from 'vue'
import HeaderView from "@/views/HeaderView.vue";
import CarouselMenu from "@/components/home/CarouselMenu.Vue";
import SlotViews from "@/components/SlotViews.vue";
import FooterMenu from "@/components/home/FooterMenu.vue";import MainTag from "@/components/MainTag.vue";
import {useRoute, useRouter} from "vue-router";const route = useRoute();
const router = useRouter();
defineOptions({name: "home",inheritAttrs: true
})
const modules = []
const carouselImgList = ["/images/example/1.jpg","/images/example/2.jpg","/images/example/3.jpg","/images/example/4.jpg","/images/example/5.jpg"
]
// 植物模型
const plantsModels = [{id: 1,name: "白及",imgSrc: "/img/plants1.png"},
]// 生长动画
const grow = []// 药材模型
const drug = []// 畜牧解剖
const animal = []
const getMenu=(itemNum) => {console.log(`itemNum : ${itemNum}`)switch (itemNum) {case 1:router.push({path:'/index'})breakcase 2:router.push({path:'/modelShowing'})breakcase 3:router.push({path:'/projectShowing'})breakdefault:router.push({path:'/index'})}
}
</script><template><div class="common-layout"><el-container><el-header class="header"><HeaderView @get-menu="getMenu"/></el-header><router-view v-slot="{ Component, route }"><keep-alive ><component :is="Component" :key="route.path"/></keep-alive></router-view><el-footer><FooterMenu/></el-footer></el-container></div>
</template>

App页面和父组件页面都需要 keepalive 配置,且父组件和子组件名字都需要添加到keepalive inclued内

查看 onActivated ,onDeactivated 判断 keepalive是否生效

onActivated讲解

http://www.lryc.cn/news/184333.html

相关文章:

  • 测试工程师思维学习
  • 前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(六)
  • 云硬盘和物理硬盘的区别
  • 数据分析--观察数据处理异常值
  • vue3+elementPlus el-input的type=“number“时去除右边的上下箭头
  • 华为云云耀云服务器L实例评测|Elasticsearch的可视化Kibana工具安装 IK分词器的安装和使用
  • 加密货币交易技巧——人和(一)
  • 数学建模:最优化问题及其求解概述
  • 企业办理CS资质,怎么选择办理等级?
  • 华为云云耀云服务器L实例评测|Huawei Cloud EulerOS 自动化环境部署
  • 从一张表格开始做挖机报价系统
  • Qt扫盲-QTreeView 理论总结
  • BF算法详解(JAVA语言实现)
  • 零基础转行网络工程师,过来人给的一些建议
  • Vue中如何进行分布式搜索与全文搜索(如Elasticsearch)
  • 数据结构-图-最小生成树问题
  • 使用vite+npm封装组件库并发布到npm仓库
  • 85.最大矩形
  • Windows服务器 开机自启动服务
  • 《算法通关之路》chapter17一些通用解题模板
  • 常用求解器安装
  • 第三章:最新版零基础学习 PYTHON 教程(第一节 - Python 运算符)
  • 细粒度特征提取和定位用于目标检测:PPCNN
  • 【STM32单片机】数学自动出题器设计
  • C语言之动态内存管理篇(1)
  • React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint
  • 【VINS】苹果手机采集单目相机+IMU数据离线运行VINS-Mono
  • 数据结构 2.1 单链表
  • [Machine Learning]pytorch手搓一个神经网络模型
  • KdMapper扩展实现之Dell(pcdsrvc_x64.pkms)