router.replace携带参数不一致

H5在用户列表页面a选择用户后,进入用户详情界面b,在返回时携带修改后的参数,但是在a页面参数并没有及时获取到。

场景复现

不通过页面按钮点击,从浏览器后退按钮返回A模拟手机返回上一页。因为用户列表通过主页进入的,在卸载时调用push会导致无法返回到主页,所以需要调用replace方法

b.vue

可以看到,不管是地址栏还是页面,参数都是存在的,但是打印是空对象

解决办法

使用onBeforeRouteUpdate

a.vue

<template>
  <div>A</div>
  {{ route.query }}
  <button @click="test">push去B</button>
</template>

<script setup lang='ts'>
import {ref} from "vue"
import { useRoute,useRouter,onBeforeRouteUpdate } from 'vue-router'
const route = useRoute()
const router = useRouter()

onBeforeRouteUpdate((to,from)=>{
  console.log(to,from);
})

const data = ref([{name:'帅无敌',age:18}])
const test = ()=>{
  router.push({path:'/b',query:data.value[0]})
}
</script>

<style>

</style>

b.vue

<template>
  <div>B</div>
  {{ $route.query }}
</template>

<script setup lang='ts'>
import {ref,onUnmounted} from "vue"
import { useRoute,useRouter } from 'vue-router'

const route = useRoute()
const router = useRouter()
const obj = ref(route.query)

onUnmounted(()=>{
  obj.value.age = 21 as any
  router.replace({ path: '/a', query:obj.value })
})

</script>

<style>

</style>

可以看到,a.vue中的onBeforeRouteUpdate的to可以正确的获取到query参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值