vue里使用keep-alive缓存页面以及使用了定时器setInterval的坑

news/2024/7/10 3:17:27 标签: vue, 缓存, vue.js

记录一个写前端的踩坑问题。
通常我们想要返回上一个页面的时候,缓存上一个页面的数据时,在vue中就提供了个好用的功能,把想要的缓存的地方加上keep-alive
如下:一般来说会缓存 表单的数据。

<keep-alive>
            <Form ref="forms" :model="formItem" :label-width="100">
  			......
            </Form>
</keep-alive>

单单这个是不太满足我们的功能的。因为这样的话,不管我们从哪个页面进入这里,数据都会被缓存。要求是在详情页或者某几个页面回来的时候缓存,这时候就要增加点东西了。
此处介绍个vue的全局前置守卫beforeRouteEnter
官方讲解: beforeRouteEnter官方讲解
在router的index.vue 中添加个路由参数

devRouter = [{
        path: '/',
        name: 'home',
        component: Home,
        meta: {
            keepAlive: true,
            isBack: false
        }
    }
   ]

在home.vue中添加下面两个钩子

beforeRouteEnter(to, from, next) {
            if (from.path == '/detail') {
                to.meta.isBack = true;
            } else {
                to.meta.isBack = false;
            }
            next();
        },
activated() {
            let _this = this
            if (!this.$route.meta.isBack) {
                this.formItem = {
                }
                ...
            }
            this.$route.meta.isBack = false;
        }

当进入该页面的时候会先到beforeRouteEnter()函数里,判断是从哪个页面来的进行设置路由里的参数, 然后执行activated()钩子。如果不是从详情页来的话,就需要手动去重置页面缓存的参数为空。 这样就可以解决了。
第二个文件 使用定时器这个简单。大都使用是这样
在mounted里挂载个启动函数,然后使用下退出时的钩子 如:

//定时器加载
Initdate() {
       this.timer = setInterval(func, 300 * 1000)
}
destroyed() {
      clearTimeout(this.timer)
}

正常使用没啥,此处但是里面要是使用了keep-alive就有个大坑了。除了初始化进入home页面时会执行mounted()里面的方法,从其他页面跳进来的时候,不再执行了。也就是说在mounted里挂载的方法不执行了。
同样,destroyed()钩子也是一样不再执行了。
这里就需要用到deactivated()和activated()钩子了。
常规思维如下:

activated() {
            if (!this.$route.meta.isBack) {
                .......
            }
            this.$route.meta.isBack = false;
            this.Initdate()//定时器函数
        },
deactivated() {
            clearTimeout(this.timer)
        },

在开发阶段记得先清掉之前的缓存,不然会会残留之前的定时器未结束


http://www.niftyadmin.cn/n/1348132.html

相关文章

Burpsuite Shiro检测插件—ShiroScannerShiroScanBurpPlugin_Shiro

目录 1.前言 2.ShiroScanner插件 2.1 ShiroScanner介绍&导入 2.2 ShiroScanner的使用 3.ShiroScan插件 4.BurpPlugin_Shiro插件

Ueditot_jsp SSRF漏洞复现

目录 1.前言 2.漏洞概述 3.漏洞原理 4.影响版本 5.漏洞等级 6.漏洞复现

python-celery学习笔记

用python-celery实现重试机制。 项目中需要异步执行某个任务&#xff0c;且失败的时候需要重试&#xff0c;且需要知道是否执行成功&#xff0c;可以这样设计。 案例代码如下&#xff1a; task() def test_task(*args,**kwargs):#处理逻辑return Truedef home(request):from …

某60终端安全管理系统前台SQL注入漏洞复现

目录 1.漏洞概述 2.影响版本 3.漏洞等级 4.漏洞复现 4.1 FOFA实战复现 4.1.1 SQLmap爆库

Django_drf的搜索出现NotFound: Invalid page解决方案

Django_drf的搜索出现NotFound: Invalid page解决方案问题上代码刨析问题解决方法问题 前端列表在第3页进行搜索的时候&#xff0c;当搜索的结果数据小于20个的时候&#xff0c;drf的view_set的list接口会报NotFound: Invalid page。 想要的效果是在第N页搜索的时候&#xff0…

泛微e-cology8前台sql注入POC

目录 1.前言 2.POC 1.前言 泛微ecology8是一款OA办公产品。但其版本ecology8存在前台SQL注入。可获取系统管理员密码hash。该该漏洞是在2021年04月08日,HW第一天爆出。 泛微官网:https://www.weaver.com.cn/ 尝试提交到CNVD上,被驳回。本想捡个洞😂。确实是不可能的…

使用set对python中循环的优化

使用set对python中循环的优化set定义项目中常用去重手段使用set优化场景及方法使用set的类似场景set去重原理set定义 日常项目中大家或多或少都使用到集合。先走走流程&#xff0c;介绍下set的定义&#xff1a; 集合&#xff08;set&#xff09;是一个无序的不重复元素序列。可…

泛微e-cology8前台sql注入漏洞复现

目录 1.漏洞概述 2.影响版本 3.漏洞等级 4.漏洞复现 4.1 FOFA实战复现 4.2 泛微e-cology