Vue更新路由时,router-view复用组件内容为何不刷新?

2026-04-05 20:072阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计987个文字,预计阅读时间需要4分钟。

Vue更新路由时,router-view复用组件内容为何不刷新?

Vue基础知识入门指南

Vue.js 是一款流行的前端JavaScript框架,适合初学者快速上手。以下是一些简单易懂的Vue基础知识,主要面向新人,资深开发者请忽略。

功能实现:

- 视图展示:通过Vue,您可以轻松地创建动态的网页界面。例如,展示一个产品列表。

- 数据绑定:Vue允许您将数据与HTML元素绑定,当数据变化时,视图会自动更新。

- 组件化开发:Vue支持组件化开发,将功能模块化,提高代码复用性和可维护性。

代码示例:

javascript// 路由配置{ path: '/products/:category', // ...}

总结:

Vue.js 提供了一种简单而强大的方式来构建用户界面,非常适合初学者入门。通过学习上述基础知识,您可以开始创建自己的Vue应用。

本文知识点比较简单,主要面向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 来阻止“复用”

具体使用方法:

Vue更新路由时,router-view复用组件内容为何不刷新?

<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复用组件内容不刷新的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

本文共计987个文字,预计阅读时间需要4分钟。

Vue更新路由时,router-view复用组件内容为何不刷新?

Vue基础知识入门指南

Vue.js 是一款流行的前端JavaScript框架,适合初学者快速上手。以下是一些简单易懂的Vue基础知识,主要面向新人,资深开发者请忽略。

功能实现:

- 视图展示:通过Vue,您可以轻松地创建动态的网页界面。例如,展示一个产品列表。

- 数据绑定:Vue允许您将数据与HTML元素绑定,当数据变化时,视图会自动更新。

- 组件化开发:Vue支持组件化开发,将功能模块化,提高代码复用性和可维护性。

代码示例:

javascript// 路由配置{ path: '/products/:category', // ...}

总结:

Vue.js 提供了一种简单而强大的方式来构建用户界面,非常适合初学者入门。通过学习上述基础知识,您可以开始创建自己的Vue应用。

本文知识点比较简单,主要面向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 来阻止“复用”

具体使用方法:

Vue更新路由时,router-view复用组件内容为何不刷新?

<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复用组件内容不刷新的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。