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弹出窗口代码大全(详细整理)
Dec 21 Javascript
js前台分页显示后端JAVA数据响应
Mar 18 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
Feb 26 Javascript
Google 地图API Map()构造器详解
Aug 06 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
jQuery中的deferred使用方法
Mar 27 jQuery
微信小程序 五星评分的实现实例
Aug 04 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
Aug 13 Javascript
js实现json数组分组合并操作示例
Feb 12 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
es6函数name属性功能与用法实例分析
Apr 18 Javascript
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 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启用sphinx全文搜索的实现方法
2014/12/24 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
PHP封装返回Ajax字符串和JSON数组的方法
2017/02/17 PHP
php安装dblib扩展,连接mssql的具体步骤
2017/03/02 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
页面间固定参数,通过cookie传值的实现方法
2017/05/31 Javascript
JS寄快递地址智能解析的实现代码
2020/07/16 Javascript
python 布尔操作实现代码
2013/03/23 Python
python网络编程示例(客户端与服务端)
2014/04/24 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python实现求数列和的方法示例
2018/01/12 Python
Python遍历numpy数组的实例
2018/04/04 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
python 进程池pool使用详解
2020/10/15 Python
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
大学总结自我鉴定
2014/01/18 职场文书
市场专员岗位职责
2014/02/14 职场文书
增值税发票丢失证明
2015/06/19 职场文书
数据库连接池
2021/04/06 MySQL
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android