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

Nuxt.js中如何使用路由守卫实现页面离开时触发API请求

方案失效原因

  • beforeRouteUpdate 钩子仅在同组件复用时的路由更新场景触发,比如路由仅修改参数、组件实例不销毁的情况,你从/cart跳转到根路径时cart页面组件直接销毁,不会触发该钩子。
  • 监听$route的逻辑仅在组件实例存活时生效,离开页面时组件已进入销毁流程,无法捕获到路由变化。

正确实现方式

你需要使用beforeRouteLeave路由守卫,该钩子会在离开当前路由对应的组件前触发,完全符合跳转页面时触发逻辑的需求。

Nuxt2/选项式API写法

<template>
  <div>
      <!-- 页面业务代码 -->
  </div>
</template>

<script>
export default {
  beforeRouteLeave(to, from, next) {
    // 此处写入你要执行的逻辑,包括API请求
    console.log('即将离开cart页面')
    // 必须调用next()才会继续执行路由跳转
    next()

    // 如果需要等异步API请求结束再跳转,可改为异步写法:
    // async beforeRouteLeave(to, from, next) {
    //   await 你的API请求方法()
    //   next()
    // }
  },
}
</script>

Nuxt3/组合式API写法

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

onBeforeRouteLeave((to, from) => {
  // 执行你的逻辑
  console.log('即将离开cart页面')
  // 异步场景直接返回Promise即可:
  // return 你的API请求方法()
})
</script>

额外注意事项

如果你使用原生<a>标签、window.location等方式跳转,不属于Vue Router管控的路由跳转,以上方法不会生效,此时需要监听beforeunload事件实现逻辑触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:24:04