vue 路由参数刷新页面状态保持_参数顺序不同算重载吗

vue 路由参数刷新页面状态保持_参数顺序不同算重载吗针对Vue相同路由不同参数的刷新问题

大家好,又见面了,我是你们的朋友全栈君。

在使用vue和vue-router开发spa应用时,我们会遇到这样一种问题。
当页面跳转时,组件本身并没有发生改变:

// 路由映射关系'/form/:type'
// 当前页面路由/form/shop1
this.$router.push({ name: 'form', params: { type: 'shop2' })

这时我们进行路由跳转后会发现组件并没有刷新,在前一个路由组件的数据都保留了下来,这并不是我们想要的效果。

对于简单的数据更新,我们可以直接监听路由参数并重新获取路由的初始化数据即可,
但是对于有很多子组件需要初始化或者reset的情况,我们还是有必要重新执行组件的生命周期。

针对这种情况可以使用三种方式解决:

1.为相同路由页面的跳转进行中间路由替换,在router上注册
beforeEach全局守卫进行拦截,跳转到一个中间路由(例如empty),再从中间过渡路由跳转至要去的路由。

// 全局导航守卫
router.beforeEach((to, from, next) => {
    if (to.name === from.name && to.params.type !== from.params.type) {
        next({ name: 'empty', query: { toPath: to.fullPath } })
    } else {
        next()
    }
})

// 中间过渡路由
let toPath = this.$route.query.toPath
if (this.toPath) {
   this.$router.push({ path: this.toPath })
}

2.使用v-if重新渲染当前页面组件

// html部分
<div>
    <router-view v-if="showRouterView"/>
</div>

// script部分
export default {
   data () {
       return {
           isRouterAlive: true
       }
   },
   methods: {
       reload () {
           this.showRouterView = false
           this.$nextTick(() => (this.showRouterView = true))
       }   
   }
}

这样把方法注册到根组件上,对于想刷新的组件直接调用reload方法即可。

3.使用vue文档组件绑定的key值来进行强制刷新

vue文档说明了当你需要

  • 完整地触发组件的生命周期钩子
  • 触发过渡

的时候可以利用更新组件绑定的key值来完成更详细的说明

这样直接为组件绑定与路由参数关联的值即可

<MyComponent :key="routeParams" />

综合来看,第三种方式最简单,推荐使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107285.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab画折线图,标记指定点「建议收藏」

    matlab画折线图,标记指定点「建议收藏」首先,找到你需要标注的点。比如说你有x、y两个列向量构成一条曲线。现在要找最大值点那么用p=find(y=max(y)),那么坐标(x(p),y(p))就是你要找的点咯。2第二步如何标记。我介绍两总方法来标记这个点,但是总体上可以归结为一种方法。(1)利用text(x(p),y(p),’o’,’color’,’g’));这里o表示标注的形状,也可以用*、^等比较好看的符号哟。’g’表示的是颜色。(…

    2022年5月20日
    55
  • IBM DS8700-IBM高端存储系统的全新成就

    IBM DS8700-IBM高端存储系统的全新成就

    2021年8月10日
    68
  • 复制粘贴不到远程桌面_远程桌面无法复制到本地

    复制粘贴不到远程桌面_远程桌面无法复制到本地在远程服务器上打开任务管理器,在进程里面找到rdpclip进程(或者剪贴板监视器),点击“结束进程”打卡DOS命令符,输入rdpclip后,确认,从新打开远程剪贴服务。

    2022年8月19日
    8
  • Python简单爬虫入门一

    Python简单爬虫入门一

    2022年2月22日
    50
  • 从U盘安装centos7(史上最简单的终极解决方案)

    从U盘安装centos7(史上最简单的终极解决方案)1、下载最新版本的centos(目前是centos7.6)https://www.centos.org/download/由于我是安装服务器,所以选择了MinimalISO(只有900多MB)2、制作Centos安装盘(准备一个空白的1GB以上的U盘)2.1.安装UltraISO2.2.安装完成后点…

    2022年5月20日
    52
  • android studio SDK 安装不成功

    android studio SDK 安装不成功第一次安装androidstudio出现的问题问题1:无法访问androidstudio官网解决:1:https://developer.android.google.cn/studio/install?hl=zh-cner.android.google.cn/studio/install?hl=zh-cn一定是要带google的地址才行,这是google给中国用的;2:访问到了还不一定行,有可能点击下载时页面还是报错了,这时候需要检查自己网络的原因,我就是因为连接了公司的网络导致下载不了

    2022年7月21日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号