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 href的用法
May 13 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
JavaScript前端开发之实现二进制读写操作
Nov 04 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
关于vue面试题汇总
Mar 20 Javascript
layui实现点击按钮给table添加一行
Aug 10 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
Mar 28 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 Javascript
Vue项目接入Paypal实现示例详解
Jun 04 Javascript
JavaScript实现图片合成下载的示例
Nov 19 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的无限分类实现想法~
2007/01/02 PHP
PHP中图片等比缩放的实例
2013/03/24 PHP
php实现的一个很好用HTML解析器类可用于采集数据
2013/09/23 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
JS数学函数Exp使用说明
2012/08/09 Javascript
几种延迟加载JS代码的方法加快网页的访问速度
2013/10/12 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
jquery代码实现多选、不同分享功能
2015/07/31 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
分享bootstrap学习笔记心得(组件及其属性)
2017/01/11 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
JS实现匀加速与匀减速运动的方法示例
2017/09/04 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
记录一次完整的react hooks实践
2019/03/11 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
JS代码实现页面切换效果
2021/01/10 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
Python+Django搭建自己的blog网站
2018/03/13 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
python中upper是做什么用的
2020/07/20 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
3分钟英语演讲稿
2014/04/29 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技