vue实现不刷新整个页面刷新数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue实现不刷新整个页面刷新数据相关的知识,希望对你有一定的参考价值。
参考技术A vue实现不刷新整个页面刷新数据这样就出现了一个bug,如新闻列表页和发布新闻页面已通过点击左侧导航打开并添加至标签栏
此时,用户通过发布新闻栏目发了一条新闻,点击新闻列表查看的时候,结果因为之前有专门处理点击标签栏标签切换至的页面不刷新,造成新闻列表页列表并没有刚刚添加的新闻,只有强制刷新才能出现,这样肯定是不行的
解决这个bug就需要实现无刷新加载数据
vue实现无刷新加载数据,使用的技术是依赖注入 关键字为provide inject
在App.vue中
然后在需要使用这个方法的的vue组件中注入这个方法
根据此篇文字加以补充
vue中实现刷新路由
参考技术A有时候有这样的场景,需要重新加载当前的页面,但不是像刷新浏览器一样刷新整个网站,那样如果有全局保存的数据(比如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实现不刷新整个页面刷新数据的主要内容,如果未能解决你的问题,请参考以下文章