大家中秋假期快乐,假期分享一些实战文章给大家,原创不易,欢迎转发,一起学习


现在大家基本都在单页应用里面使用了 keep-alive缓存不活动的组件实例,而不是销毁它们

如果你还没有使用,可以看看官方的介绍(如果大家需要一些新手入门的文章可以留言哈):https://cn.vuejs.org/v2/api/#...

用法很简单:主要是包裹


<keep-alive>
...
</keep-alive>

使用场景:

单页应用环境配合使用的:


<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>

有以下几个常识,如果你还没有使用 keep-alive 的话,可以记下来:

1、组件内的第一次的生命周期

mounted ==> activated

2、切换路由再次进来只会触发 activated

3、可以通过 router 的钩子函数 beforeRouteEnter 来做一些辅助判断

具体可以看看官方的这个的文档:https://router.vuejs.org/zh/g...

不能获取组件实例 this

比如你要设置 data 里面的变量,抱歉,这里操作不了,那如何做呢?

很多熟悉的人会想到 next 操作 vm 对象


beforeRouteEnter (to, from, next) {
next(vm => {
// 通过 `vm` 访问组件实例
})
}

是的,这里你可以通过 from.name 来做一些判断,比如如下代码片段:

需求很简单,判断一下从特定路由切换过来,做一个判断赋值给 data 的 isFromTester


beforeRouteEnter (to, from, next) {
console.log(to, from);
if (from.name == 'Tester') {
next(vm => {
vm.isFromTester = true
})
} else {
next(vm => {
vm.isFromTester = false
})
}
}

然后你就可以在 activated 生命周期直接判断啦


activated () {
if (this.isFromTester) {
//...
}
}

大功告成啦

抱歉,这里的 activated 不会那么及时地更新 isFromTester,所以第一次你获取的不是 true,第二次是可以的

那我们就要来刨根问底了,到底为啥不是及时更新的呢?

有没有人想到了 vue 里面一个很常见的 nextTick 这个东西?

是滴,就是它,它骗了 activated,真相在这里:(我们省去了很多路由事件里面自己的处理逻辑和 vue activated 的 hook 的触发)

来源:https://segmentfault.com/a/1190000016493658

keep-alive 被 beforeRouteEnter 骗了的更多相关文章

  1. SQL Server 2012故障转移的looksalive check和is alive check

    什么是looksalive check和is alive check SQL Server故障转移集群是建立在windows集群服务上的一种热备的高可用方案.在集群运行过程中,windows集群服务定 ...

  2. Keeping Async Methods Alive

    Consider a type that will print out a message when it’s finalized, and that has a Dispose method whi ...

  3. 转载:有关SQL server connection Keep Alive 的FAQ(3)

    转载:http://blogs.msdn.com/b/apgcdsd/archive/2012/06/07/sql-server-connection-keep-alive-faq-3.aspx 这个 ...

  4. 转载:有关SQL server connection Keep Alive 的FAQ(2)

    转: http://blogs.msdn.com/b/apgcdsd/archive/2012/05/18/sql-server-connection-keep-alive-faq-2.aspx 在下 ...

  5. BZOJ-2049 Cave洞穴勘测 动态树Link-Cut-Tree (并查集骗分TAT)

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 5833 Solved: 2666 [Submit] ...

  6. Keep Alive

    跳板机时经常出现连接被断开的情况.如果发生这种情况,请在客户端配置Keep Alive设置,具体方法参考如下: Windows: secureCRT:Properties -> Terminal ...

  7. 51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛

    OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了 神奇的故事就开始了: 晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就 ...

  8. How to Keep Alive SSH Sessions

    How to Keep Alive SSH Sessions Many NAT firewalls time out idle sessions after a certain period of t ...

  9. keep alive的相关介绍

        无论Windows还是linux,Keepalive就三个配置参数.下文以linux环境为介绍. Technorati 标签: keepalive     tcp_sock结构体中有三个有关的 ...

随机推荐

  1. Django【第20篇】:Ajax

    初始Ajax 一.Ajax准备知识:json 说起json,我们大家都了解,就是python中的json模块,那么json模块具体是什么呢?那我们现在详细的来说明一下 1.json(Javascrip ...

  2. 数据库JDBC

    数据库概述 什么是数据库?数据库就是存储数据的仓库,本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库进行增删改查操作. 数据库对应一个应用系统,在系统中有很多的功能,每 ...

  3. 关于web前端性能优化问题

    好久没有来博客写随笔了,可能是懒了吧,哈哈, 最近很想整理一篇关于前端性能优化的问题,毕竟能提高网站的观赏性对吧.提升网站性能,提升用户体验 那 什么是web性能优化? 可以这么理解:从用户访问资源到 ...

  4. 调整数组顺序使奇数位于偶数前面(python)

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 方法1:冒泡  O( ...

  5. 使用AnnotationConfigApplicationContext注册配置类

    1. AnnotationConfigApplicationContext功能 该类可以实现基于Java的配置类加载自定义在Spring的应用上下文的bean. 1.1 使用方式一:在构造方法中完成注 ...

  6. ASCII 、UTF-8、Unicode编码

    1.各种编码的由来 1.1.计算机编码的由来 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.所以只能是用一些数字来表示文本,这就是编码的由来.最早的计算机在设计时采用8个比 ...

  7. shell时间转换脚本

    字符串转换为时间戳: time2utc #!/bin/sh Time=$ date -d "${Time}" '+%s' 时间戳转日期字符串 utc2time #!/bin/sh ...

  8. 个推安卓推送SDK集成步骤详解

    以下是一位开发者在集成个推安卓推送SDK时候的亲身经历: 作者:吃饱了想睡. 概述 公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个 ...

  9. javaweb阶段几个必会面试题

    1.jsp的9大隐式对象 response(page):response对象是javax.servlet.http.HttpServletResponse对象的一个实例.就像服务器创建request对 ...

  10. 分类汇总统计mysql数据库一个字段中不同的记录的总和

    方法1.用 if 语句,如下例. 方法2.用case when then else 语句,用法如同if. mysql> select sum(if(id<500,1,0)),sum(if( ...