You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中如何跳转至同一路由带查询参数的地址并解决栈溢出问题

报错原因

你遇到的栈溢出是无限递归触发路由钩子导致的:beforeRouteLeave 只要路由跳转目标的路径匹配当前组件对应的路由规则就会执行,你原始代码的判断条件只校验了to.path === '/place-ad',调用next('/place-ad?ad_id=12345')重定向后,目标路由的path依然是/place-ad,会再次触发当前钩子进入if分支,循环调用next最终栈溢出。

修改判断为to.path !== '/place-ad'后逻辑不生效,是因为浏览器返回的目标路由正好是/place-ad,判断不成立直接进入else分支放行,不会执行重定向逻辑。

正确实现

你需要在判断条件里额外校验目标路由是否已经携带ad_id参数,只有当目标是/place-ad且未携带参数时才触发重定向,避免循环:

beforeRouteLeave (to, from, next) {
    if (to.path === '/place-ad' && !to.query.ad_id) {
      console.log("path is /place-ad, add ad_id parameter")
      next({
        path: '/place-ad',
        query: { ad_id: 12345 }
      })
    } else {
      console.log("skip redirect")
      next()
    }
}

说明:使用对象形式传递路由参数比字符串拼接更规范,可自动处理参数转义问题,适配多参数场景。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:45:04