vue使用keep-alive实现组件切换时保存原组件数据方法


Posted in Javascript onOctober 30, 2020

前言

最近在做一个精品课程后台管理系统,其中涉及文件上传和文件列表展示,我不想将他们写入一个组件,故分开两个组件实现。

问题:但由于上传文件需要时间,这时要是用户切换别的组件查看时,上传文件组件就销毁了,导致文件上传失败。

追求效果:想利用keep-alive实现上传组件切换时仍继续上传文件,而其他组件则不会存活。

使用keep-alive的过程

普通方法:直接使用keep-alive

<keep-alive>
 <router-view />
</keep-alive>

效果:虽然能使上传文件组件存活,在切换组件时仍可继续上传

问题:其余各个组件都不会销毁和重新挂起,导致所有组件的内容不会更新

更好一点的方法:配置路由加以判断是否适用keep-alive

路由js:

//ManageFiles组件需要重新挂起刷新数据,而ManageUploadFile为上传文件组件,故想之存活
{
 path:'files',
 name:'ManageFiles',
 component: () => import('../pages/course/manage/resource/files/Files'),
},
{
 path:'uploadfile',
 name:'ManageUploadFile',
 meta:{
 keepAlive:true  //是否存活标志
 },
 component: () => import('../pages/course/manage/resource/files/UploadFile'),
},

切换组件:

<template>
 <div class="manageResource">
 <keep-alive>
  <router-view v-if="$route.meta.keepAlive" />
 </keep-alive>
 <router-view v-if="!$route.meta.keepAlive" />
 </div>
</template>

效果图:

(1)一开始为File组件,mounted()打印'我是File'

vue使用keep-alive实现组件切换时保存原组件数据方法

(2)第一次切换为UploadFile组件,mounted()打印'我是UploadFile'

vue使用keep-alive实现组件切换时保存原组件数据方法

(3)再次切换回File组件,mounted()再次重新打印'我是File'

vue使用keep-alive实现组件切换时保存原组件数据方法

(4)最后再次切换回UploadFile组件,因为它一直存活,所以不会重新触发mounted()再次重新打印'我是UploadFile'

vue使用keep-alive实现组件切换时保存原组件数据方法

补充知识:vue 动态组件(tabs切换)keep-alive:主要用于保留组件状态或避免重新渲染

通过keep-alive 保留数据值 填写数据时切换到其他页面,后返回当前页数据保留 ,主要用于保留组件状态或避免重新渲染

<!--动态组件-component使用-->
 <div class="app">
 <ul>
 <li @click="currView='home'">首页</li>
 <li @click="currView='abount'">关于我们</li>
 </ul>
 <!--通过keep-alive 保留数据值 填写数据时切换到其他页面,后返回当前页数据保留-->
 <keep-alive>
 <component :is="currView"></component>
 </keep-alive>
 </div>
<script type="text/x-Template" id="homeTemp">
  <h2>首页数据</h2>
</script>
<script type="text/x-Template" id="abountTemp">
  <h2>关于我们数据<input type="text"/></h2>
</script>
<script type="text/javascript">
 var vm=new Vue({
 el:'.app',
 data:{
  currView:"home"
 },
 components:{
  "home":{
   template:"#homeTemp"
  },
  "abount":{
  template:"#abountTemp"
  }
 }
 });
 
</script>

vue使用keep-alive实现组件切换时保存原组件数据方法

以上这篇vue使用keep-alive实现组件切换时保存原组件数据方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
网页中表单按回车就自动提交的问题的解决方案
Nov 03 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
js验证身份证号有效性并提示对应信息
Oct 19 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
May 17 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
工作中常用到的ES6语法
Sep 04 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
Sep 19 Javascript
React 路由懒加载的几种实现方案
Oct 23 Javascript
Vue侦测相关api的实现方法
May 22 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
Aug 01 Javascript
vue内置组件keep-alive事件动态缓存实例
Oct 30 #Javascript
Javascript表单序列化原理及实现代码详解
Oct 30 #Javascript
解决Vue-cli无法编译es6的问题
Oct 30 #Javascript
Vue2.0 ES6语法降级ES5的操作
Oct 30 #Javascript
Vue自定义表单内容检查rules实例
Oct 30 #Javascript
探索node之事件循环的实现
Oct 30 #Javascript
使用TS来编写express服务器的方法步骤
Oct 29 #Javascript
You might like
PHP安全下载文件的方法
2016/04/07 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
JS组件Bootstrap按钮组与下拉按钮详解
2016/05/10 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
python脚本设置超时机制系统时间的方法
2016/02/21 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
哪些是python中web开发框架
2020/06/17 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
波兰珠宝品牌:YES
2019/08/09 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
中学生在校期间的自我评价分享
2013/11/13 职场文书
元旦促销方案
2014/03/15 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
业务员自荐信范文
2014/04/20 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
实施意见格式范本
2015/06/05 职场文书
Python 数据科学 Matplotlib图库详解
2021/07/07 Python