当路由到某个组件时,由于组件会复用,所以生命周期函数不会再次执行,

如果这个组件是模板组件,靠传入不同数据来显示的.那么,可能会发生参数变化了但页面数据却不变化.

问题

假如有个组件 info.vue

路由path如下

1. /user/info/23  // 23是参数,下面34也是参数

2. /user/info/34

希望通过参数来刷新组件页面数据.刷新数据的方法在Vue生命周期函数的created方法里调用.

当改变参数时,页面并没有变化.因为,路由只是参数变化了,path并没变化,组件还是这个info.vue组件.

此时,组件复用,生命周期函数不再执行,所以刷新数据的方法也就没机会执行了.

原因见管网描述 https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%89%8D%E7%BD%AE%E5%AE%88%E5%8D%AB

研究

官网上推荐使用watch,监控路由变化,将取数据方法在watch中调用,

或者是 beforeRouteUpdate 这个路由生命周期函数,https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E7%BB%84%E4%BB%B6%E5%86%85%E7%9A%84%E5%AE%88%E5%8D%AB

经过测试,当路由的参数变化之后,数据刷新了,

但是出了个新问题,就是当路由改变时,再回到改变前的路由时,又不刷新了.

假设当前路由是

/user/info/34

跳到路由

/home

然后再跳回来到

/user/info/34

这里,页面又不动了.

经过研究发现,配合使用这两个路由周期函数,能解决这问题

beforeRouteEnter 和 beforeRouteUpdate
前者在进入路由所在组件时(路由发生变化)执行,
后者在路由的参数变化时执行
 
在这两个方法里执行刷新数据,两者时机对应两种切换路由操作.经过实践,要两者配合才行.否则会有bug.
如果只用其一,那么,当路由不变,只变参数时,就刷新不了列表
如果只用其二,那么,当路由地址变化时,就刷新不了列表
 
最后,没有使用watch,而是使用了下面的方法

总结

这两个路由周期函数的时机正好是在路由不变参数变化时执行和路由变化时执行.所以能解决上述BUG.

// 这个方法不用调用this,因为此时机组件还没生成,所以无this
// 要调用刷新数据方法时,需要写在next回调里,
// next是在组件生成后会调用
beforeRouteEnter(to: any, from: any, next: any) {
next((vm: any) => {
vm.updateList(to.params.id);
});
} // 这个方法是路由不变,只变参数时执行
private beforeRouteUpdate(to: any, from: any, next: any) {
this.updateList(to.params.id);
next();
} // 更新数据方法
private updateList(userId: string) { }

vue路由参数变化刷新数据的更多相关文章

  1. 【问题】VUE 同一页面路由参数变化,数据不刷新

    依赖路由的params参数获取写在created生命周期里面,因为相同路由二次甚至多次加载的关系 没有达到监听,退出页面再进入另一个页面并不会运行created组件生命周期,导致数据还是第一次进入的数 ...

  2. vue 路由参数变化,页面不更新的问题

    监控$route 在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,如果不监听路由参数值的变化,页面无数据刷新,需手动刷新浏览器,这样做就不是我们的预期效果. 举例:当前路由为  /p ...

  3. VUE 路由参数改变重新刷新数据

    VUE 路由参数改变重新刷新数据 App.vue 里面使用路由,然后通过App.vue文件中的搜索功能搜索刷新路由文件中的列表. 修改 index.js 文件 首先在路由文件 index.js 文件中 ...

  4. Vue路由参数

    vue路由参数 1.参数router-link vue.prototype.xxx = {add:fn}`所有组件中,使用this.xxx就能拿到这个对象2.查询字符串 (1)配置: :to=&quo ...

  5. vue中监听路由参数变化

    今天遇到一个这样的业务场景:在同一个路由下,只改变路由后面的参数值, 比如在这个页面  /aaa?id=1 ,在这个页面中点击一个按钮后 跳转到 /aaa?id=2 , 但从“/aaa?id=1”到“ ...

  6. vue路由传参刷新丢失

    没有系统学习过vue,以前使用路由传参都是直接this.$router.push({name:'main',params:{'id': 123}})的,没有在路由定义中配置参数,如下: router: ...

  7. vue路由参数的获取、添加和替换

    获取路由参数 getUrlKey(name){//获取url 参数 return decodeURIComponent((new RegExp('[?|&]'+name+'='+'([^&am ...

  8. VUE 同一页面路由参数变化,视图不刷新的解决方案

    1.监听路由处理 watch: { $route(to, from) { // 逻辑 // 重新调用数据接口 } }, 2.beforeRouteUpdate导航守卫 路由更新时触发 beforeRo ...

  9. vue同一个路由,但参数发生变化,页面不刷新的问题(vue监听路由参数变化重新渲染页面)

    watch: { $route: function(newVal, oldVal) { console.log(oldVal); //oldVa 上一次url console.log(newVal); ...

随机推荐

  1. 从零开始学安全(四十五)●browser_autopwn2漏洞利用配合Ettercap工具实施DNS欺骗攻击

    系统:kali 2019  工具Ettercap,Metasploit 环境内网地址 首先 cd /etc/ettercap/ 移动在ettercap 文件下 在用vim 打开编辑 etter.dns ...

  2. Java开发笔记(八十五)通过字符流读写文件

    前面介绍了文件的信息获取.管理操作,以及目录下的文件遍历,那么文件内部数据又是怎样读写的呢?这正是本文所要阐述的内容.File工具固然强大,但它并不能直接读写文件,而要借助于其它工具方能开展读写操作. ...

  3. 中文命名之Hibernate+MySQL演示

    最近有个契机, 需要在一个给定开发环境中验证中文命名的可行性. 达成的例子源码在: HibernateExampleZh 当前用的是Hibernate 3.3.2.GA. 之后测试了更多版本, 彩蛋见 ...

  4. 迭代器模式 Iterator 行为型 设计模式(二十)

    迭代器模式(Iterator)   走遍天下,世界那么大,我想去看看   在计算机中,Iterator意为迭代器,迭代有重复的含义,在程序中,更有“遍历”的含义 如果给定一个数组,我们可以通过for循 ...

  5. 【土旦】Vue+WebSocket 实现长连接

    1.websocket 连接代码 created() { this.initWebsocket() }, methods: { // 初始化websocket initWebsocket() { le ...

  6. 用app.net Core搞掂多国语言网站

    Asp.net Core 中文文档很少,你可以看英文的,不过英文的也是说的有点乱.这篇文章是干货. 1. 配置好你的WebApplication,使他可以支持国际化语言,修改文档Startup.cs ...

  7. 一起学Android之ViewPager

    本文以一个简单的小例子,简述在Android开发中ViewPager的常见用法,仅供学习分享使用. 概述 ViewPager是一个支持使用者左右滑动的布局管理控件,可以通过一个实现的(适配器)Page ...

  8. VS OpenCV imread imwrite nameWindow等相关报错问题

    排查过程 1. 项目属性C++目录中,包含库include 和 lib 目录了吗? 去自己的opencv安装目录中找到include 和 lib(一般在x64下有两个vc14/vc15, 我的是4.0 ...

  9. android中使用afinal一行源码显示网络图片

    下面代码是关于android中使用afinal一行显示网络图片的代码. public class DemoActivity extends FinalActivity { @Override publ ...

  10. 回归算法比较(线性回归,Ridge回归,Lasso回归)

    代码: # -*- coding: utf-8 -*- """ Created on Mon Jul 16 09:08:09 2018 @author: zhen &qu ...