当前位置:首页 > VUE

vue拦截器实现

2026-01-20 00:23:03VUE

Vue 拦截器实现方法

在 Vue 中,拦截器通常用于在请求或响应被处理前进行统一处理,例如添加认证信息、错误处理等。以下是几种常见的拦截器实现方式:

使用 Axios 拦截器

Axios 是 Vue 中常用的 HTTP 客户端,支持请求和响应拦截器。

请求拦截器示例:

axios.interceptors.request.use(
  config => {
    // 在发送请求前添加 token
    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.data;
  },
  error => {
    // 统一处理错误
    if (error.response.status === 401) {
      // 跳转到登录页
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

使用 Vue Router 导航守卫

Vue Router 提供了全局前置守卫(beforeEach)和全局后置钩子(afterEach),可用于拦截路由跳转。

全局前置守卫示例:

router.beforeEach((to, from, next) => {
  const isAuthenticated = localStorage.getItem('token');
  if (to.meta.requiresAuth && !isAuthenticated) {
    next('/login');
  } else {
    next();
  }
});

全局后置钩子示例:

router.afterEach((to, from) => {
  // 路由跳转后执行的操作,如页面标题设置
  document.title = to.meta.title || '默认标题';
});

使用 Vue 自定义指令拦截事件

Vue 自定义指令可以用于拦截 DOM 事件,例如阻止未授权操作。

自定义指令示例:

Vue.directive('auth', {
  inserted(el, binding) {
    const hasPermission = checkPermission(binding.value);
    if (!hasPermission) {
      el.style.display = 'none';
    }
  }
});

// 使用方式
<button v-auth="'admin'">管理员操作</button>

使用 Vue 混入(Mixin)拦截生命周期

混入可以用于在多个组件中复用拦截逻辑,例如在 created 钩子中检查权限。

混入示例:

vue拦截器实现

const authMixin = {
  created() {
    if (!this.$store.state.user.isAuthenticated) {
      this.$router.push('/login');
    }
  }
};

// 在组件中使用
export default {
  mixins: [authMixin],
  // 其他组件逻辑
};

注意事项

  • 拦截器逻辑应尽量简洁,避免阻塞主流程。
  • 对于异步操作(如 token 刷新),需确保拦截器正确处理 Promise。
  • 在路由拦截中,避免无限循环(例如在 beforeEach 中重复跳转到登录页)。
  • 生产环境中建议对拦截器的错误处理进行封装,提供友好的用户反馈。

以上方法可以根据实际需求组合使用,例如同时使用 Axios 拦截器和路由守卫来实现完整的权限控制流程。

标签: 拦截器vue
分享给朋友:

相关文章

vue实现看板

vue实现看板

Vue 实现看板功能 使用 Vue 实现看板功能可以通过组件化开发、状态管理和拖拽库结合完成。以下是一个完整的实现方案: 基础项目结构 src/ ├── components/ │ ├── Ka…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue filter 实现

vue filter 实现

在 Vue.js 中,过滤器(Filter)是一种用于文本格式化的功能,可以在模板中直接使用。以下是实现过滤器的详细方法: 全局过滤器注册 通过 Vue.filter 方法注册全局过滤器,可在所有组…

vue实现vr

vue实现vr

Vue 实现 VR 的方法 Vue 可以与 WebVR 或 WebXR API 结合使用,通过 Three.js、A-Frame 等库实现 VR 效果。以下是几种常见方法: 使用 A-Frame 框…

vue sku 实现

vue sku 实现

Vue SKU 实现方案 在电商系统中,SKU(Stock Keeping Unit)是商品的最小库存单位,通常由多个属性组合而成(如颜色、尺寸等)。以下是基于 Vue 的实现方案。 数据结构设计…