解决vue更新路由router-view复用组件内容不刷新的问题
2019-11-04 18:06
5407 查看
本文知识点比较简单,主要面向vue新人解惑,vue前辈请忽略。
实现功能:
见上图,这是一个产品列表,当进入不同列表时应该更新内容。
代码如下:
//router配置
{ path: "/products/:category", name: "Products", components: { ... } }
//组件js配置
mounted() { this.getData(this.$route.params.category); }, methods: { getData: function(category){ this.axios.get("/products/" + category).then(res => { const data = res.data.data; this.pros = data.pro; }).catch(error => { console.log("error init." + error); }); } }
目前症状:
1、点击不同类别,url有变化已正确指向不同的路由,但是内容没有更新
2、由当前类别进入其他类别路由后刷新页面,可正确获取数据
知识点
在使用Vue-router做项目时,会遇到如/serviceId/:id这样只改变id号的场景。由于router-view是复用的,单纯的改变id号并不会刷新router-view
watch 除了可以监听数据的变化,路由的变化也能被其监听到
:key vue 为你提供了一种方式来声明“这两个元素是完全独立的――不要复用它们”。只需添加一个具有唯一值的 key 属性即可
针对以上,经过本人项目实践以及网友贡献,有三种方法可解决:
方法一:通过 watch 监听路由(亲测可行)
mounted() { this.getData(this.$route.params.category); }, methods: { getData: function(category){ ... } }, watch: { //通过watch来监听路由变化 "$route": function(){ this.getData(this.$route.params.category); } }
方法二:用 :key 来阻止“复用”
具体使用方法:
<router-view :key="key"></router-view> computed: { key() { return this.$route.name !== undefined? this.$route.name +new Date(): this.$route +new Date() } }
tips:使用computed属性和Date()可以保证每一次的key都是不同的,这样就可以如愿刷新数据了
方法三:通过 vue-router 的钩子函数 beforeRouteEnter beforeRouteUpdate beforeRouteLeave
computed:mapGetters([ ... ]), beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `this` // 因为当钩子执行前,组件实例还没被创建 }, beforeRouteUpdate (to, from, next) { // 在当前路由改变,但是该组件被复用时调用 // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候, // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 // 可以访问组件实例 `this` }, beforeRouteLeave (to, from, next) { // 导航离开该组件的对应路由时调用 // 可以访问组件实例 `this` }
本人尝试使用"beforeRouteUpdate",但位得到解决,其他方法没有尝试。
以上内容如果有错误,请各位朋友指出,谢谢。
这篇解决vue更新路由router-view复用组件内容不刷新的问题就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- 解决element-ui中el-menu组件作为vue-router模式在刷新页面后default-active属性与当前路由页面不一致问题的方法
- vue刷新当前路由:router-view 复用组件时不刷新的3种解决方案总结
- vue刷新当前路由:router-view 复用组件时不刷新的3种解决方案总结
- vue-router中关于组件复用页面不刷新的问题
- vue刷新当前路由 router-view中的内容(pc端+手机端)
- router-view 复用时组件不刷新的解决办法
- vue-router路由参数刷新消失的问题解决方法
- 解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题
- vue-router 多个路由地址绑定一个组件造成 created 不执行的解决方法
- 三、Vue(组件、组件间数据传递、slot内容分发、vue-router路由、单文件组件、vue-cli脚手架 )
- 解决vue-router进行build无法正常显示路由页面的问题
- vue2.0 路由不显示router-view的解决方法
- vue-router 如何在当前路由下重新点击当前路由的router-link实现刷新 组件重新渲染
- vue-router 组件实例被复用问题
- vue打开二级或者三级页面传输对象,再刷新浏览器数据丢失问题解决(vue使用router传递数据)
- vue-router组件状态刷新消失的问题
- vue.js用vue-router路由传参时页面刷新后参数消失的问题
- vue-router 组件复用问题详解
- 详解解决Vue相同路由参数不同不会刷新的问题
- vue组件复用router问题