首页 > 其他分享 >vue中手动清除KeepAlive缓存

vue中手动清除KeepAlive缓存

时间:2023-05-08 18:55:40浏览次数:38  
标签:缓存 name vue tab 组件 路由 KeepAlive

首先,这是vue的官方文档 KeepAlive | Vue.js (vuejs.org) 

KeepAlive组件能够保存当前组件状态,在进行路由跳转时变为【不活跃状态】而非卸载。但是官方并没有提供清除缓存的方法(除了刷新页面,整体重建)

 

 假设以下是我们路由&对应组件的代码

<router-view v-slot="{Component}">
              <KeepAlive :include="keepArr">
                <component :is="Component"/>
              </KeepAlive>
            </router-view>

需要注意的是,keepalive如果不绑定【缓存数组】的话,将会默认缓存所有组件,这将会占用较大内存;

可以考虑使用"max"属性, 即 :max="number" ,当缓存组件数量超过设定的number个数时,会自动销毁最先进入缓存的组件;

但是这样不太方便,所以这里使用 include 属性,绑定缓存组件名数组。

该数组为动态引用,所以请勿在data中定义,而是要computed中作为计算属性绑定其他动态变化值。

 

以我的项目为例,大致结构如下

<div>
    <el-tabs ……>
        <el-tab-pane>……</el-tab-pane>
    </el-tabs>
    <router-view v-slot="{Component}">
        <KeepAlive :include="keepArr">
            <component :is="Component"/>
        </KeepAlive>
    </router-view>    
</div>

点击相应菜单时,新增对应的tab标签(若是已有则切换过去)然后跳到对应路由下的组件。

在已激活的tab间切换时自然是保留着缓存,当关闭标签页时,清除当前组件缓存(或者你可以自定义触发方式,只要能获取到需要清除组件的组件名 "name")

 

 showTabs是已激活的tab数组,内部存储的有当前tab对应的路由,组件名,以及tab自身的标签名等。

  computed: {
    keepArr() {
      let temp = this.showTabs.map(item => {
        return item.name
      })
      return [...temp]
    }
  },

为了确保该缓存能够正确生效,请在路由中确保该组件的’name‘与组件内的属性’name‘相同,否则将无法识别需要缓存的组件

 

标签:缓存,name,vue,tab,组件,路由,KeepAlive
From: https://www.cnblogs.com/ricardox3/p/17382506.html

相关文章

  • vue-cli打包出单文件
    //vue.config.js修改const{defineConfig}=require('@vue/cli-service')module.exports=defineConfig({ transpileDependencies:true, filenameHashing:false, css:{  extract:false, }, configureWebpack:{  optimization:{   spl......
  • Vue "引用式"调用组件内函数
    场景希望在点击页面上的某个button时,刷新某个组件的内容.组件内容刷新函数getStatistic()在组件<Table/>内,当点击"统计"按钮时,页面Block切换至统计页面,同时调用对应组件中的getStatistic()函数,更新数据.解决方案//创建一个ref对象,接受<Table/>组件......
  • 记录--极致舒适的Vue页面保活方案
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助为了让页面保活更加稳定,你们是怎么做的?我用一行配置实现了Vue页面保活是指在用户离开当前页面后,可以在返回时恢复上一次浏览页面的状态。这种技术可以让用户享受更加流畅自然的浏览体验,而不会被繁琐的操作打扰......
  • vue3 多级数据下拉选择组件
    若依的下拉组件太复杂,我改了一下,希望对大家有帮助,基于element-plusel-tree-select组件:举个栗子,TreeSelect.vue:<template><div><el-tree-selectstyle="width:100%"v-model="valueId"id="tree-option"ref="s......
  • vue3 通过fuse.js 实现前端模糊查询
    在项目中写好多个查询组件,基于element-plusel-select组件:举个栗子,SelectAllCompany.vue:<template><!--获取客户下拉数据,type0有限公司--><el-selectv-model="current":multiple="multiple"remote:remote-method="querySearch":suff......
  • vue2自定义组件@click点击失效问题及解决
    1.参照官方文档,可以用@click.native=“click”解决2.$emit组件之间事件传递解决https://www.jb51.net/article/246610.htm......
  • vue3 证件识别上传组件封装
    证件图片识别上传根据业务需要,经常涉及到证件上传,例如身份证上传、银行卡、营业执照等信息,根据设计师的设计,单独封装了一个上传组件。识别接口后端用的是阿里云的。上传组件用的是element-plusel-upload上代码:<template><divclass="component-upload-image"><el-up......
  • 直播开发app,VUE图片裁剪,打码,旋转功能
    直播开发app,VUE图片裁剪,打码,旋转功能1,先下载插件。 cnpminstallimage-mosaic-D   cnpminstall--savevue-cropper  ​2,在components目录下创建一个imageEdit文件夹,文件夹下创建index.vue,index.vue中内容如下:  <template> <div>  <el-dialog   t......
  • Django-Vue-Admin基于django+vue前后端分离开箱即用框架
    平台简介......
  • 在一个进程中通过队列的方式缓存opencv视频帧,并在另一个进程中读取
    import_threadimportqueueimporttimeimportcv2fromflaskimportFlask,Responseapp=Flask(__name__)max_size=3q1=queue.Queue(maxsize=max_size)q2=queue.Queue(maxsize=max_size)open_flag=1defopen_and_show(ip_camera_url,title):......