vue路由在keep-alive下的刷新问题 对watch的影响
转载自:https://www.cnblogs.com/dansingal/p/8302100.html
问题描述:
在keep-alive中的在跳转到指定的路由时刷新对应的路由,其余不刷新。
1
2
3
4
5
|
<transition name= "fade" mode= "out-in" > <keep-alive> <router-view></router-view> </keep-alive> </transition> |
有几种解决方式:
1.在keep-alive中直接添加 include,cachedViews(Array类型:包含vue文件的组件name都将被缓存起来);反之exclude则是不包含;
注意:所有.vue组件文件都必须附上name属性!!!建议用vuex管理cachedViews
1
2
3
|
<keep-alive :include= "cachedViews" > <router-view></router-view> </keep-alive> |
2.监测$router的变化;
1
2
3
4
|
watch: { // 如果路由有变化,会再次执行该方法 "$route" : "fetchDate" } |
但是会在页面离开时再次执行fetchDate,并不是我们需要的,所以可以在to和from上添加执行逻辑,但也是十分的麻烦
1
2
3
4
5
6
7
8
|
//$router是只读状态,所以赋值操作会失效 watch: { $route (to, from) { if (list.indexOf(from.path) > -1){ //自行添加逻辑,list为你不想有缓存的路径 this .getData() } } } |
3.在添加keep-alive后会增加两个生命周期mounted>activated、离开时执行deactivated,路由的进入和切换回相应的触发activated和deactivated,这样就可以在每次入路由执行更细致的操作了
1
2
3
4
5
|
//如果是服务端渲染就算了 activated() { //只刷新数据,不改变整体的缓存 this .fetchDate(); } |
4.还有更简单粗暴的
1
2
3
4
5
6
|
//我就笑笑不说话<br><div> <keep-alive> <router-view v- if = "$route.meta.keepAlive" ></router-view> </keep-alive> <router-view v- if = "!$route.meta.keepAlive" ></router-view> </div> |
5.还有种情况,在不同路由应用了相同的vue组件
1
2
|
{path: 'aaa' ,component:Mompage,name: 'mom' }, {path: 'bbb' ,component:Mompage,name: 'momPlus' } |
默认情况下当这两个页面切换时并不会触发vue的created或者mounted钩子,需要手动的watch:$router(又回到上面的步骤),或者在router-view上加上唯一值。
1
2
3
4
5
6
7
|
//随便抄一段代码过来 <router-view :key= "key" ></router-view> computed: { key() { return this .$route.name !== undefined? this .$route.name + + new Date(): this .$route + + new Date() } } |
vue路由在keep-alive下的刷新问题 对watch的影响的更多相关文章
- 用vue写一个仿app下拉刷新的组件
如果你用vue弄移动端的页面,那么下拉刷新还是比较常见的场景,下面来研究如何写一个下拉刷新的组件(先上图); 由于节省大家的时间,样式就不贴出来了. html结构也不必介绍了,直接看代码吧-.- &l ...
- vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多
一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...
- 实现移动端上拉加载和下拉刷新的vue插件(mescroll.js)
做一个简单的移动端展示项目,后台分页后前端加载,实现上拉加载下一页,找了下,还是用这个mescroll.js插件好一点 1.npm安装 npm install --save mescroll.js / ...
- VUE 路由参数改变重新刷新数据
VUE 路由参数改变重新刷新数据 App.vue 里面使用路由,然后通过App.vue文件中的搜索功能搜索刷新路由文件中的列表. 修改 index.js 文件 首先在路由文件 index.js 文件中 ...
- vue.js移动端app实战4:上拉加载以及下拉刷新
上拉加载以及下拉刷新都是移动端很常见的功能,在搜索或者一些分类列表页面常常会用到. 跟横向滚动一样,我们还是采用better-scroll这个库来实现.由于better已经更新了新的版本,之前是0.几 ...
- 详解vue移动端 下拉刷新
看完这篇文章,相信大伙也一样可以,做出一个自己的刷新,加载的组件 说这个功能之前,大家要先了解一下,要怎么触发滚动条事件. 一定要注意,所有滚动事件都必须要满足这个条件,横向滚动条也一样, 只要满足子 ...
- vue路由参数变化刷新数据
当路由到某个组件时,由于组件会复用,所以生命周期函数不会再次执行, 如果这个组件是模板组件,靠传入不同数据来显示的.那么,可能会发生参数变化了但页面数据却不变化. 问题 假如有个组件 info.vue ...
- vue-scroller实现vue单页面的上拉加载和下拉刷新问题
在vue中如何简单的实现页面的上拉加载和下拉刷新,在这里我推荐使用vue-scrolle插件. vue-scrolle的基本使用方法: 1.下载 npm i vue-scroller -D 2.导包 ...
- vue+better-scroll 下拉刷新,上拉加载更多
better-scroll 来做下拉刷新和 上拉加载 特别方便. 安装好vue脚手架和better-scroll 之后 直接复制粘贴就可以看到效果了 <template> <div ...
随机推荐
- manjaro 常用软件安装
1.搜狗输入法 sudo pacman -S fcitx-sogoupinyin fcitx-configtool fcitx-im yay -Sa fcitx-qt4 sudo vim /etc/e ...
- C/C++常见问题汇总
问题1.数组和指针的区别 数组名不可以作为左值 char * p1 = "Hello World" ; //分配字符串常量,然后赋给 p1 ,一个指针型变量,是左值 ] = &qu ...
- CUDA和TensorFlow的版本匹配问题
CUDA和TensorFlow的版本匹配问题 部分转载自博客:https://blog.csdn.net/MahoneSun/article/details/80809042 列举一些CUDA和Ten ...
- 异步消息处理机制相关面试问题-intentservice面试问题详解
IntentService是什么? IntentService是继承并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作,启动IntentService方法和启动传统的S ...
- Hadoop-No.8之时间戳
要获得良好的HBase的模式设计,要正确的理解和使用时间错.在HBase中,时间戳的作用如下所述. 时间戳决定了在put请求修改记录时那些记录更新 时间戳决定了一条记录的多个版本在返回时的排序 时间戳 ...
- Codeforces 833B / B34D The Bakery
题 OwO http://codeforces.com/contest/833/problem/B 解 首先读入的时候把数据读入到2 ~ n+1的位置(因为线段树处理不到0,所以后移了一格) dp[i ...
- 24.stark组件全部
admin组件: 博客里面的图片的是在太难弄了,有大哥会弄给我贴一片博客,我一个一个加太累了,没有加 admin参考:https://www.cnblogs.com/yuanchenqi/articl ...
- PHP回顾(4)文件相关函数
touch() 创建文件 (修改时间,不存在时创建) copy() 复制文件,复制过程中可以修改文件名 rename() 重命名 或 移动文件 ...
- perl 纯变量(Scalar) 转载
转载http://blog.chinaunix.net/uid-20639775-id-154591.html Perl有三种变量: 纯变量(Scalar Varible) 数组(Array) 关联数 ...
- 51 Nod 1636 教育改革(dp)
1636 教育改革 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 最近A学校正在实施教育改革. 一个学年由n天 ...