当前位置:首页 > VUE

vue怎么实现拦截

2026-03-28 12:56:37VUE

Vue 实现拦截的方法

在 Vue 中实现拦截通常涉及以下几种场景:路由拦截、HTTP 请求拦截、全局状态拦截等。以下是具体的实现方法。

路由拦截(导航守卫)

Vue Router 提供了导航守卫功能,可以在路由跳转前、跳转后或跳转过程中进行拦截处理。

const router = new VueRouter({ ... })

router.beforeEach((to, from, next) => {
  // 检查是否需要登录
  if (to.matched.some(record => record.meta.requiresAuth)) {
    if (!isAuthenticated()) {
      next({ path: '/login' })
    } else {
      next()
    }
  } else {
    next()
  }
})

HTTP 请求拦截(Axios)

使用 Axios 拦截器可以在请求发送前或响应返回后进行拦截处理。

import axios from 'axios'

// 请求拦截器
axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
axios.interceptors.response.use(
  response => {
    return response
  },
  error => {
    if (error.response.status === 401) {
      // 跳转到登录页
      window.location.href = '/login'
    }
    return Promise.reject(error)
  }
)

全局状态拦截(Vuex)

通过 Vuex 的插件或中间件机制,可以在状态变更前后进行拦截处理。

const store = new Vuex.Store({
  state: { ... },
  mutations: { ... },
  plugins: [
    store => {
      store.subscribe((mutation, state) => {
        // 拦截状态变更
        if (mutation.type === 'SOME_MUTATION') {
          console.log('状态已变更:', mutation.payload)
        }
      })
    }
  ]
})

组件生命周期拦截

在组件生命周期钩子中可以进行拦截处理,例如在 beforeCreatebeforeMount 时检查权限。

export default {
  beforeCreate() {
    if (!isAuthenticated()) {
      this.$router.push('/login')
    }
  }
}

自定义指令拦截

通过自定义指令可以在 DOM 元素上实现拦截逻辑。

Vue.directive('permission', {
  inserted(el, binding) {
    const { value } = binding
    if (!hasPermission(value)) {
      el.parentNode.removeChild(el)
    }
  }
})

使用方法:

vue怎么实现拦截

<button v-permission="'admin'">仅管理员可见</button>

以上方法涵盖了 Vue 中常见的拦截场景,可以根据实际需求选择合适的方式。

标签: vue
分享给朋友:

相关文章

vue实现闪烁

vue实现闪烁

Vue实现元素闪烁效果 使用CSS动画实现 通过Vue绑定class结合CSS动画实现闪烁效果,代码简洁且性能较好。 <template> <div :class="{ 'bl…

vue 实现挂载

vue 实现挂载

Vue 实现挂载的基本方法 在 Vue 中,挂载是将 Vue 实例与 DOM 元素关联的过程。通过挂载,Vue 可以管理 DOM 并实现数据绑定和响应式更新。 创建 Vue 实例并挂载 const…

vue实现fadein

vue实现fadein

Vue 实现 FadeIn 效果 在 Vue 中实现淡入(FadeIn)效果可以通过 CSS 过渡、动画或第三方库实现。以下是几种常见方法: 使用 CSS 过渡 通过 Vue 的过渡系统结合 CSS…

vue 实现全屏

vue 实现全屏

Vue 实现全屏功能 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 完成。以下是一个完整的实现方案: 安装依赖(可选) 如果需要跨浏览器兼容性更好,可以安装…

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…

vue实现折叠

vue实现折叠

Vue 实现折叠功能 在 Vue 中实现折叠功能可以通过多种方式完成,以下介绍几种常见的方法。 使用 v-show 或 v-if 控制显示隐藏 通过 Vue 的指令 v-show 或 v-if 可以…