解决vue中菜单再次点击内容不刷新问题

 更新时间:2023年08月13日 08:58:00   作者:掘金归海一刀  
当elementUI中菜单打开后,再次点击不会刷新的问题,导致菜单再次点击不刷新的根本原因是页面打开后,再次打开相同的页面是不会刷新的,这应该是框架的机制就是如此,小编整理了两个比较不错的解决方法,需要的朋友可以参考下

说明

今天项目经理让我解决一下elementUI中菜单打开后,再次点击不会刷新的问题,看了下elementUI组件官网,发现好像除了一个菜单选中事件,没啥别的有用的。导致菜单再次点击不刷新的根本原因是页面打开后,再次打开相同的页面是不会刷新的,这应该是框架的机制就是如此。网上又查了下,像这种this.$router.go(0)和location.reload()整个页面刷新的方式肯定直接pass了。本着认真负责,甘于奉献的工作态度,我毅然决然放弃了摸鱼的机会,整理了两个比较不错的解决方法。

我们先在项目中找到菜单组件的位置,在其组件中定义下菜单选中事件handleSelect

image.png

方式一

我们在定义的handleSelect方法中,加入下面一样代码:

 handleSelect(){
      this.$router.push('/empty');
 }

这行代码是选中菜单后,让其跳转到一个不存在的空页面,等程序走到后面会再次跳回到我们要跳的页面,如果没有的话,可以根据事件参数跳转回来:

 handleSelect(url,url_arr){
      this.$router.push('/empty');
       this.$router.push(url);
 }

保存代码后,测试下效果,发现页面同一个菜单多次点击也会刷新页面了。但是这种方式有个问题,由于它是跳到空页面再跳回的,所以如果页面渲染的稍微慢点,我们会可以发现url上会闪一下,当然这种问题应该没啥影响。

方式二

在根组件APP.vue中用v-if控制router-view,实现一个刷新方法,具体操作如下:如果你的APP.vue中有reload方法了,你就可以在你要点击菜单刷新的页面调用(调用方法下面说),如果没有,则在App.vue中加入 <router-view v-if="isRouterAlive"></router-view> ,data中不要忘记定义 isRouterAlive:true

image.png

在methods中加入reload方法

 reload(){
        this.isRouterAlive=false;
        this.$nextTick(() => {
          this.isRouterAlive=true;
        })
 },

上面准备好了,剩下的就是handleSelect中如何调用App.vue中的方法了,有两种方式能调用到reload方法:

  1. 使用provide、inject调用首先,我们用provide在父组件提供reload方法,使其可供handleSelect使用
   provide (){
     return {
       reload:this.reload
     }
  },

然后我们在要调用的地方引入inject:['reload']

image.png

最后就可以直接调用,点击一次菜单刷新一次就OK了。

 handleSelect(){
      this.reload();
 }
  1. 使用事件总线(Event Bus):在 Vue 中,可以创建一个全局的事件总线对象,将  App.vue  中的方法注册到事件总线上,然后在 Element UI 组件中触发相应事件,从而调用  App.vue  中的方法。在 main.js (或者其他入口文件)中创建事件总线:
import Vue from 'vue';
// 创建事件总线
Vue.prototype.$bus = new Vue();

App.vue 中注册方法到事件总线上:

methods: {
 reload(){
        this.isRouterAlive=false;
        this.$nextTick(() => {
          this.isRouterAlive=true;
        })
 },
},
created() {
  // 注册方法到事件总线上
  this.$bus.$on('app-reload', this.reload);
}

在handleSelect中调用下,我们点击菜单就可以刷新啦

 handleSelect(url,url_arr){
   this.$bus.$emit('app-reload');
 }

结语

无论哪种方式,都能解决我的问题,最终选择哪种方式都无所谓,方法一最简单,对于我做的管理后台来说,用的人少,有些用户体验有点瑕疵也没关系;但是如果使用人数较多,客户要求比较高的,可以使用第二种方法。

到此这篇关于解决vue中菜单再次点击内容不刷新问题的文章就介绍到这了,更多相关vue中菜单再次点击内容不刷新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中跳转界面的3种实现方法

    vue中跳转界面的3种实现方法

    这篇文章主要给大家介绍了关于vue中跳转界面的3种实现方法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • vite中如何使用@ 配置路径别名

    vite中如何使用@ 配置路径别名

    这篇文章主要介绍了vite中如何使用@ 配置路径别名,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Vue js with语句原理及用法解析

    Vue js with语句原理及用法解析

    这篇文章主要介绍了Vue js with语句原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • vue 插件的方法代码详解

    vue 插件的方法代码详解

    在开发项目的时候,我们一般都用 vue-cli 来避免繁琐的 webpack 配置和 template 配置。这篇文章主要介绍了如何写一个 vue 插件,需要的朋友可以参考下
    2019-06-06
  • vue Tab切换以及缓存页面处理的几种方式

    vue Tab切换以及缓存页面处理的几种方式

    相信tab切换对于大家来说都不算陌生,后台管理系统中多会用到。如果不知道的话,可以看一下浏览器上方的标签页切换,大概效果就是这样。
    2021-05-05
  • vue实现页面内容禁止选中功能,仅输入框和文本域可选

    vue实现页面内容禁止选中功能,仅输入框和文本域可选

    今天小编就为大家分享一篇vue实现页面内容禁止选中功能,仅输入框和文本域可选,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue自定义封装指令以及实际使用

    vue自定义封装指令以及实际使用

    市面上大多数关于Vue.js自定义指令的文章都在讲语法,很少讲实际的应用场景和用例,下面这篇文章主要给大家介绍了关于vue自定义封装指令以及实际使用的相关资料,需要的朋友可以参考下
    2022-01-01
  • 使用vue.js制作分页组件

    使用vue.js制作分页组件

    本文给大家分享的是个人在使用vue.js制作的文章和评论的分页组件,并使用webpack打包起来,这里推荐给大家,有需要的小伙伴可以参考下
    2016-06-06
  • vue函数input输入值请求时延迟1.5秒请求问题

    vue函数input输入值请求时延迟1.5秒请求问题

    这篇文章主要介绍了vue函数input输入值请求时延迟1.5秒请求问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 在antd Table中插入可编辑的单元格实例

    在antd Table中插入可编辑的单元格实例

    这篇文章主要介绍了在antd Table中插入可编辑的单元格实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10

最新评论