首页 > 其他分享 >vue组件动态缓存与动态刷新

vue组件动态缓存与动态刷新

时间:2023-06-27 21:23:03浏览次数:32  
标签:缓存 const name vue home 组件 router 动态

动态缓存

前言

在项目中,为了减少性能消耗,有时我们需要使用keep-alive把组件缓存起来,但是并不是所有组件都需要被缓存,那么如何控制那些组件需要缓存呢?主要使用到路由meta,路由前置守卫,vux,动态组件。

实现

APP.vue

<script setup>
import { ref,computed } from 'vue'
import { useRouter } from 'vue-router'
import { useAlertsStore } from './store/modules/app.js'


const store = useAlertsStore()
const includes = computed(()=>{
  return store.$state.includes
})


const router = useRouter()
const tohome = ()=>{
  router.push('/home')
}

const totest = ()=>{
  router.push('/test')
}

</script>

<template>
  <div>
    <button @click="tohome">home</button>
    <button @click="totest">test</button>
    <router-view v-slot="{Component}">
      <keep-alive :include="includes">
        <component :is="Component"></component>
      </keep-alive>
    </router-view>
  </div>
</template>

<style>
.bg {
  background-color: pink;
}
</style>

路由index.js

import { createRouter, createWebHashHistory } from 'vue-router'
import { useAlertsStore } from '../store/modules/app.js'

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    // 导入的.vue组件名必须和组件注册的名字一致 文件名最好全小写 组件首字母最好大写
    path: '/home',
    name: 'home',
    component: () => import('../views/home.vue'),
    meta: {
      name: 'home',
      keepAlive: true
    }
  },
  {
    path: '/test',
    name: 'test',
    component: () => import('../views/testtwo.vue'),
    meta: {
      name: 'test',
      keepAlive: false
    }
  },
]


const router = createRouter({
  history: createWebHashHistory(),
  routes,
})


router.beforeEach((to, from, next) => {
  const store = useAlertsStore()
  if (to.meta.keepAlive && to.name) {
    store.setincludes({ name: to.name })
  }
  next() // 如果没传next 可以不用调用next函数 也能跳转
})



export default router

vuex

 state: () => {
    return {
      includes: [],
    }
  },
   actions: {
    // 添加需要缓存的组件
    setincludes(payload) {
      this.$state.includes = [...new Set([...this.$state.includes, payload.name])]
    },

标签:缓存,const,name,vue,home,组件,router,动态
From: https://www.cnblogs.com/coderz1/p/17509951.html

相关文章

  • vue3标准开发过程
    1.如何用脚手架快速新建一个vue3项目安装vue-cli后,用如下命令创建 vuecreatemy-vue3-project 默认创建vue3项目,直接回车即可。 新建完成后,如何引入element-plus? 用Webstrom打开项目,先运行一次npminstall然后运行npminstallelement-plus--save 然后打开m......
  • 高德地图动态Marker和自定义弹框、交互事件、中心点跳转
    高德地图vue3使用下载NPM:npmi@amap/amap-jsapi-loader--save根据官网提示,VUE3需要改变监听模式下载npmi@vue/reactivity组件内配置初始化<scriptsetup>//开发技术vue3piniatsimport{ref}from"vue";importAMapLoaderfrom"@amap/amap-jsapi-loa......
  • 静态代理和动态代理
    3.静态代理和动态代理的区别按照代理的创建时期,代理类可以分为两种:静态代理:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。动态代理:动态代理是指在java程序运行过程(程序已经启动正在运行中)由jvm生成代理类的class信息,该cla......
  • vue新建项目标准流程
    1、如何做到快速创建Vue2项目:要快速创建Vue2项目,可以按照以下步骤进行操作:步骤1:确保已经安装了Node.js和npm(Node.js的包管理器)。步骤2:打开终端或命令提示符,进入你想要创建项目的目录。步骤3:运行以下命令安装VueCLI(命令行工具):[email protected]步骤4:创建一个......
  • JAVA的动态性之脚本语言支持API
    JAVA语言是一种静态类型的编程语言。静态类型的含义是指在编译的时候进行类型检查。JAVA源代码中的每个每个变量的类型都需要显式地进行声明。所有的变量、方法的参数和返回值的类型在程序运行之前就必须是已知的。JAVA语言的这种静态类型特性使编译器可以在编译的时候执行大量的检......
  • java动态代理技术
    主要用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法,在方法执行前后做任何你想做的事情(甚至根本不去执行这个方法),因为在InvocationHandler的invoke方法中,你可以直接获取正在调用方法对应的Method对象,具体应用的话,比如可以添加调用日志,做事务控制等。还......
  • 基于vue +Java+springboot+element-ui开发的智慧班牌系统源码
    电子班牌系统又称之为智慧班牌,是当前校园数字化信息化建设、文化建设的主流,是校园日常工作安排、校园信息发布、班级文化风采展示、课堂交流、家校互通的重要应用载体。在每个班级门口安装一台电子班牌终端,实现学校日常管理、校园信息化建设数据对接,为学生提供一个德智教育文化环境......
  • vue插槽
    什么是插槽在日常的项目开发中,当我们在编写一个完整的组件时,不可避免的会引用一些外部组件或者自定义组件。有了这种引用关系之后,我们就可以把它们称为父组件或者子组件,同时父子组件之间有很多的通信方式,比如可以通过props向子组件传递数据,或者通过$emit、$parent调用父组件中......
  • 庆军之blazor动态组件的研究与总结
    只上代码:rootcontrol.ControlParams=newDictionary<string,object>();rootcontrol.ControlParams["a"]="ssss";rootcontrol.Children.Add(newMControlParam(){ControlType=typeof(Layout),......
  • VUE框架组件中通信方式(3)
    useAttrs使用方式类似于props传值,useAttrs既可以传数据,也可以传事件。如果父组件给子组件传递的参数,在子组件中同时使用props和useAttrs获取,那么参数只在props中生效,也就是说props的优先级高于useAttrs。示例代码如下://template><div><h1>useAttrs</h1><el-but......