当前位置:首页 > 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),可用于拦截路由跳转。

vue拦截器实现

全局前置守卫示例:

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拦截器实现

自定义指令示例:

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 钩子中检查权限。

混入示例:

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 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { -…

vue实现上移下移插件

vue实现上移下移插件

实现上移下移功能的 Vue 插件 在 Vue 中实现列表项的上移和下移功能,可以通过自定义指令或组件封装的方式完成。以下是两种常见实现方式: 基于数组操作的通用方法 通过操作数组索引实现元素位置交…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return { op…

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现摘要

vue实现摘要

Vue 实现摘要的方法 在 Vue 中实现文本摘要功能通常涉及截取文本的前部分内容并添加省略号。可以通过计算属性、过滤器或自定义指令来实现。 计算属性实现 在 Vue 组件中定义一个计算属性,用于…

vue实现ai

vue实现ai

Vue 实现 AI 功能 Vue.js 可以通过集成第三方 AI 服务或本地 AI 模型来实现 AI 功能。以下是几种常见的方法: 集成第三方 AI API 使用 Vue 调用如 OpenAI、G…