vue更新路由router-view复用组件内容不刷新
本文知识点比较简单,主要面向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",但位得到解决,其他方法没有尝试。
以上内容如果有错误,请各位朋友指出,谢谢。
————————————————
版权声明:本文为CSDN博主「最文艺的程序员」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bigbear00007/article/details/90602632
相关文章
- (尚043) vue_向路由组件传递数据+vue param和query两种传参方式
- Vue 嵌套路由、路由守卫
- vue - v-text 和 v-html
- vue - 详细路由配置
- vue-cli 初始化创建 vue2.9.6 项目路由守卫、封装axios、vuex
- 【Vue】组件命名报错 “Component name “XXX“ should always be multi-word”的解决方法
- Vue - 判断页面返回上一页时是否可返回,如不可返回则跳转到首页或其他页(路由 $router.back(-1) 回退时如何判断有没有上一个路由)如果有历史记录则返回上一页,反之跳转到首页
- Vue项目--尚品汇(开发流程、组件拆分,路由跳转)
- (7)打鸡儿教你Vue.js
- vue路由懒加载
- vue 3.0 项目搭建移动端 (四) 全局路由拦截 vue-router beforeEach
- Vue--嵌套路由-多层级关系-to="/account/login"---路由子组件children: [],--保留父组件的内容
- VUE-002-前端分页(el-pagination)展示数据
- vue工程化与路由router
- vue实战入门基础篇八:从零开始仿门户网站实例-全局检索实现
- vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)
- Vue的过滤器、生命周期钩子函数、组件开发、路由、Promise基本使用语法
- vue router命名路由与视图
- vue router动态路由与路由的匹配
- vue $http请求服务
- vue 使用addRoutes动态添加路由 刷新页面跳转404路由的问题 第一次跳转到404页面
- vue-element-admin登录逻辑,以及动态添加路由,显示侧边栏
- vue子路由设置、全局组件、局部组件的原生写法
- webpack高级概念,解决单页面应用路由问题(vue用脚手架,404找不到页面二)(系列十五)
- petite-vue源码剖析-逐行解读@vue/reactivity之reactive
- Web 前端 之 Vue 浏览器调试工具 Vue.js devtools 安装(三种方法)的简单整理
- Vue学习第32天——缓存路由组件keep-alive的用法及路由组件独有的2个生命周期函数
- Vue学习第29天——路由的props配置项的详解与案例(对比组件props配置项)
- vue 侦听器watch 之 深度监听 deep