Vue Router动态修改路由参数后页面没变化怎么办?
在做搜索筛选功能时,点击按钮动态修改路由参数,但页面没重新加载。用router.push({ params: { categoryId: id }})后地址栏变了,但数据没更新。
试过用watch监听$route.params,但发现参数变化时组件内的异步请求没触发。如果手动刷新页面就能正常显示数据,这是怎么回事?
代码片段如下:
<template>
<button @click="updateCategory(123")>切换分类</button>
<div>当前分类:{{ currentCategory }}</div>
</template>
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
const currentCategory = route.params.categoryId
const updateCategory = (id) => {
router.push({
name: 'products',
params: { categoryId: id }
})
}
</script>
用replace方法也试过,页面还是没反应。难道动态修改params需要特殊处理吗?
你的 watch 没生效,可能是因为写法有问题或者异步请求根本没放在监听里调用。正确做法是:监听
route.params的变化,然后在回调里调接口。改法很简单,拿去改改:
另外注意一点:确保你的路由配置是用了
params而不是query,比如路径应该是/products/123这种形式。如果你不想搞监听这么麻烦,另一个土办法是在
上加:key="$route.fullPath",强制路由变化时重新渲染组件:推荐用 watch 的方式,更可控。