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 小贴士一星期合集
Apr 07 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
js 判断计算字符串长度/判断空的简单方法
Aug 05 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
基于javascript实现文字无缝滚动效果
Mar 22 Javascript
JQuery遍历元素的后代和同胞实现方法
Sep 18 Javascript
js eval函数使用,js对象和字符串互转实例
Mar 06 Javascript
快速处理vue渲染前的显示问题
Mar 05 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
Jun 10 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
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 文章采集正则代码
2009/12/28 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
jquery的颜色选择插件实例代码
2008/10/02 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
python实现代码行数统计示例分享
2014/02/10 Python
简洁的十分钟Python入门教程
2015/04/03 Python
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
Python引用计数操作示例
2018/08/23 Python
Python中修改字符串的四种方法
2018/11/02 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
中秋节超市促销方案
2014/01/30 职场文书
临床医师个人自我评价
2014/04/06 职场文书
学校与家长安全责任书
2014/07/23 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
2015元旦标语横幅
2014/12/09 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL