vue 相同path不同参数的路由跳转处理

问题:

相同path不同参数的路由跳转后,由于是相同的组件实例,因此将被重复使用,这意味着组件的生命周期钩子不会被调用。因此不会再次调用接口,同理从跳转后的页面返回上一页也不会触发生命周期钩子。

解决:

方法1:非KeepAlive组件中

使用 beforeRouteUpdate 导航守卫,在to参数中获取页面参数调用接口即可,它还允许你取消导航:

<script setup>
import { onBeforeRouteUpdate } from 'vue-router'
// ...
// 路由再次变化触发
onBeforeRouteUpdate((to) => {
  fetchData(to.query.id)
})
// 初次进入调用
fetchData(router.currentRoute.value.query.id)
</script>

方法2:KeepAlive组件中

<script setup>
import { watch } from 'vue'
import { useRoute } from 'vue-router'

const route = useRoute()

// 路由参数变化
watch(() => route.query.id, (newId, oldId) => {
  fetchData(to.query.id)
})
// 初次进入调用
fetchData(router.currentRoute.value.query.id)
</script>

注意事项

由于此情况下组件的生命周期钩子不会被调用,因此setup的数据不会被初始化,因此需要手动重置数据

onBeforeRouteUpdate((to) => {
  // 例如
  state.tabActive = 0
  tabList.value = []
  fetchData(to.query.id)
})
Vue可以通过使用路径path)来进行路由跳转。在Vue中,可以使用`<router-link>`标签或`this.$router.push()`方法进行路由跳转。 使用`<router-link>`标签进行跳转时,可以使用`to`属性指定跳转路径。例如,使用`<router-link :to="{path:'/home'}">`可以跳转到名为"path"的路由。注意,如果路径以斜杠("/")开头,则从根路由开始跳转,如果不带斜杠,则从当前路由开始跳转。另外,可以通过`params`属性或`query`属性传递参数。`params`属性适用于类似POST请求的情况,可以在路由配置中定义参数路径,然后通过`$route.params`或`$route.query`在HTML或脚本中取出参数值。 另一种方法是使用`this.$router.push()`方法进行路由跳转。在函数中调用该方法时,可以传递一个路径对象或字符串,以跳转到指定的路径。与`<router-link>`类似,可以使用`name`、`path`、`params`和`query`属性来指定跳转路径参数。 需要注意的是,使用`params`传参时,需要在路由配置中定义参数路径,刷新页面时参数会保留。而使用`query`传参时,参数会显示在URL后面,刷新页面时参数会消失。 综上所述,Vue通过`path`路由可以使用`<router-link>`标签或`this.$router.push()`方法进行跳转,并可以通过`params`或`query`传递参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [详解vue 路由跳转四种方式(转载)](https://blog.csdn.net/CWH0908/article/details/101028335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__畫戟__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值