vue怎么无感刷新当前页面 vue无痕刷新
- 游戏八卦
- 2024-12-28 04:09
- 1
解决vue项目 点击相同菜单栏页面不刷新
痛点: 用vue搭建的后台管理系统中,一般点击左侧当前菜单,当前组件是无法刷新的。
vue怎么无感刷新当前页面 vue无痕刷新
vue怎么无感刷新当前页面 vue无痕刷新
问题原因: 点击相同菜单,因为vue的路由机制是处于相同的路由下,路由组件不重新渲染,因此点击相同路由,vue路由系统不做任何的响应。
解决方案思路: vue的路由机制是无法改变的,但是结合我们的项目发现,如果点击相同的路由,我们可以动态的销毁当前组件,再重新加载,这样就达到了重新渲染的效果。
实际作:
Vue页面重新加载刷新数据配置
种方式 reload
一、在根文件 app.vue文件中配置
二、在需要引用重置的页面中添加
大功高成!!!
补充:(使用种 方式 reload,体验度好,无空白页面)
以下两种方式也是实现重置刷新的功能
缺点:相当于按ctrl+F5 强制刷新那种,整个页面重新加载,会出现一个瞬间的空白页面,体验度不好
vue 刷新页面的三种方法
相当于按ctrl+F5 强制刷新那种,整个页面重新加载,会出现一个瞬间的空白页面,体验不好
(1)新建一个空白页面 reload.vue:
(2)需要刷新的页面,先跳转到reload.vue,再跳转回原页面,从而实现刷新(路径上带param的不能用):
(1)App.vue添加provide,和data一样,返回一个对象:
(2)需要刷新的页面内注入inject依赖:
vue中的页面刷新问题
1. 用vue-router重新路由到当前页面,页面是不进行刷新的
2.采用window.reload(),或者router.go(0)刷新时,整个浏览器进行了重新加载,闪烁,体验感贼不好
3.provide / inject 组合
作用:允许一个祖先组件向其所有子孙后代注入一个依赖,不论组件层次有多深,并在起上下游关系成立的时间里始终生效。
App.vue:
声明reload方法,控制router-view的显示或隐藏,从而控制页面的再次加载
4.provide / inject 用法
provide:选项应该是一个对象或返回一个对象的函数。该对象包含可注入其子孙的属性。
inject:一个字符串数组,或一个对象,对象的 key 是本地的绑定名
提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。如果你传入了一个可的对象,那么其对象的属性还是可响应的。
vue中实现刷新路由
有时候有这样的场景,需要重新加载当前的页面,但不是像刷新浏览器一样刷新整个网站,那样如果有全局保存的数据(比如vuex的数据,当前页面的路由参数)就会重置,所以需要实现刷新当前路由。
实现先说一个属性: router.replace
replace 和 push 用法基本一样,但不会在浏览器留下 history 记录,就是当你使用 replace 访问的路径,通过浏览器的前进后退按钮都访问不到。
实现的方法有点投机取巧,就是建立一个空页面,通过 router.replace 访问,再从空页面使用 router.replace 跳转回来,达到刷新当前路由的效果。下面是基础实现:
先建立一个组件做空页面, refresh.vue :
通过使用组件的路由前置守卫返回上一个页面,需要注意的是在这个守卫中访问不到 this 实例,需要通过在 next 回调中的参数代表平时的 this 。
再建立这个空页面的路由信息:
在你需要刷新路由的组件中的方法中访问该路径即可:
这样算是完成一个乞丐投机取巧版的刷新当前路由,这种方法是有瑕疵的,当刷新的路由带有参数, params 或者 query ,通过这个刷新方式之后参数就会丢失,所以需要将上面的方法加以改造一下,让参数页面的参数保持不变,先从需要刷新路由的组件的方法改造:
这样兼容了路由中带有 params 和 query ,先判断了当前路由是否有 params 属性,如果当前路由没有 params 和 query 属性,默认都是空对象,所以传递一个空对象跟没传是一样的。注意路由跳转传递 params 和 query 的方式不相同,传递 params 时,不能使用路由的 path ,需要用到路由 nam e属性,所以上面分了情况进行跳转。这样跳转到写好的空页面,参数是传递给 refresh 这个路由,所以需要再从这个空页面传递回来,下面是改造后的 refresh 组件:
在这个路由守卫中, to 就代表当前页面,也就是 refresh 组件
改造后这个刷新路由的方式就兼容了路由带有参数的情况,目前超人鸭遇到的需求这种方式已经能满足,如果还有其他情况需要再做处理的,或者有更好的实现方法,欢迎指教哦。
版权声明:本文内容由互联网用户自发贡献。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 836084111@qq.com,本站将立刻删除。
下一篇