vue多级路由刷新问题
本篇文章给大家谈谈vue多级路由刷新问题,以及vue路由局部刷新对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文内容目录一览:
- 1、vue中的页面刷新问题
- 2、vue中实现刷新路由
- 3、vue-router动态路由添加及路由刷新后消失的解决办法
- 4、vue路由传参及解决vue路由传参页面刷新参数丢失问题
- 5、当多个路由地址对应同一组件时,切换路由组件不刷新的问题
- 6、vue实现多级路由的思维
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 组件
改造后这个刷新路由的方式就兼容了路由带有参数的情况,目前超人鸭遇到的需求这种方式已经能满足,如果还有其他情况需要再做处理的,或者有更好的实现方法,欢迎指教哦。
vue-router动态路由添加及路由刷新后消失的解决办法
1、取出非第一级的所有数据
2、映射出所有路由规则
3、添加路由
4、 登录成功后 保存菜单数据,保存后在vuex直接触发添加事件即可 this.commit('add_route')
vue路由传参及解决vue路由传参页面刷新参数丢失问题
Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下:
注意:
以上传参方式基本上可以理解为ajax中的post请求方式,参数都是不可见的,但是该方法有一个弊端,就是当页面刷新后参数值会丢失!!!
以上两种方式是可以解决页面刷新参数消失问题的,query这种方式可以理解为是ajax中的get方法,参数是直接在url后面添加的,参数是可见的。
当多个路由地址对应同一组件时,切换路由组件不刷新的问题
在vue官方文档中进行了如下描述:
解释一下:当我们使用 动态路由 或者在 路由上拼接参数 时,进行页面组件跳转,如果前后跳转都使用了同一个组件,这就导致我们后面的路由跳转会使用前一次组件实例,因此组件不会重新渲染加载
当我们想传递参数后,组件重新渲染组件实例,可以使用vue官方文档提供的方案:
如果我们对"路由变化作出响应是"============== 刷新当前组件的话 :
可以使用: this.$router.go(0) 来刷新当前组件
vue实现多级路由的思维
一级路由包含二级路由再包含更多的子路由,需要缓存的页面用keepalive 包括就OK,但是每次回到上级路由,是否刷新当前页面?
答案是肯定的,从下级路由回到上级,可以用keeplive,直接复用内存里的,不用二次加载。
另外就是keeplive 要在vuerouter标签之外、
二 一个就是要实现多级路由复用一个组件的问题,数据展示页,数据和样式的组合,再被渲染到展示页面。
具体怎么实现不知道,props貌似能做的有限。目前数据是写死的,然后比较简单。这个用什么去搞呢??
所以,挂在路由页面之前,要渲染数据,那么在数据的获取的方式就有很多种,所以需要再考虑一下。
现在希望,进入二级路由之后,页面产生三级路由,三级路由点击之后,还是在二级路由,或者说如何销毁上级路由的内容呢?
vue多级路由刷新问题的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vue路由局部刷新、vue多级路由刷新问题的信息别忘了在本站进行查找喔。