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 相关文章推荐
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
js日期联动示例
May 02 Javascript
ActiveX控件与Javascript之间的交互示例
Jun 04 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
JS实现下拉菜单赋值到文本框的方法
Aug 18 Javascript
JS+CSS实现简易实用的滑动门菜单效果
Sep 18 Javascript
AngularJS  $on、$emit和$broadcast的使用
Sep 05 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
Oct 29 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
Apr 26 Javascript
Node.js API详解之 net模块实例分析
May 18 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
Terran魔法科技
2020/03/14 星际争霸
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
php查看当前Session的ID实例
2015/03/16 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
Sea.JS知识总结
2016/05/05 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
微信小程序methods中定义的方法互相调用的实例代码
2018/08/07 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python实现子类调用父类的方法
2014/11/10 Python
Scrapy的简单使用教程
2017/10/24 Python
python最长回文串算法
2018/06/04 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
浅谈Python爬虫基本套路
2019/03/25 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
ET Mall东森购物网:东森严选
2017/03/06 全球购物
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
小学三年级学生评语
2014/04/22 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
政协会议宣传标语
2014/10/09 职场文书
党校学习个人总结
2015/02/15 职场文书
社区文明倡议书
2015/04/28 职场文书
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL