路由跳转同一个界面,但是params不同。页面不刷新?(路由的key)

27 篇文章 1 订阅
10 篇文章 0 订阅

引入知识点:路由的key值

  • 如果不设置路由的key值,默认情况下是根据路径判断的,就是不包括params值

  • 例子:
    Home组件内容(父)

<template>
  <div>
    <button @click="goRoute">路由跳转</button>
    <div>父组件的index:{{index}}</div>
    <router-view></router-view>
    <div>上面表示:页面只执行了一次mounted,并没有刷新,但是我们传递的路径确实不同</div>
  </div>
</template>
<script>
export default {
    data() {
        return {
            index:0
        }
    },
    methods: {
        goRoute(){
            this.$router.push(`/child1/${this.index++}`)
        }
    },
}
</script>
  • Child组件内容(子)
<template>
  <div>
    子组件的index:{{index}}
    <br/>
    子组件的params:{{this.$route.params.msg}}
    <br/>
  </div>
</template>
<script>
export default {
    data() {
        return {
            index:9999
        }
    },
    mounted(){
        console.log(this.$route);
        this.index = this.$route.params.msg
    }
}
</script>
  • router内容
export default createRouter({
    history:createWebHistory(),
    routes:[
        {
            path:'/child1/:msg',
            component:Child1
        }
    ]
})

思路:

  1. 倘若我们点击跳转按钮

在这里插入图片描述
那么父组件中的index++,并且跳转路由到子组件
并且会把index作为params参数传入

  1. 在进入子组件,mounted函数中会赋值params的值给子组件的index
  2. 当我们多次点击路由跳转按钮
  • 那么父组件index会增加
  • 子组件的params会增加
  • 子组件的index没有变化

结论:

  • 因为在路由跳转的时候,值改变了params参数,路径是没有改变的,所以vuerouter在识别的时候,会当做你没有进行跳转,所以mounted只执行了一次

解决方法:

  • 在父组件中把router-view加上key
  • 原本:<router-view ></router-view>
  • 变为:<router-view :key="this.$route.params"></router-view>

效果:

  • 在每次点击跳转按钮的时候,由于传入的params参数在发生变化,那么每次路由会认为是进入了新的界面,就会重新加载

应用场景:

在这里插入图片描述

  • 可以有的不同的解决方案:通过watch,监听params值是否改变
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值