当前位置:首页 > 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 钩子中检查权限。

混入示例:

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页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用…

vue如何实现到期提醒

vue如何实现到期提醒

实现 Vue 到期提醒功能 使用计算属性计算剩余时间 在 Vue 组件中定义一个计算属性,计算目标日期与当前日期的差值。通过 Date 对象获取时间戳并计算剩余天数或小时数。 computed: {…

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…

vue前端分页怎么实现

vue前端分页怎么实现

前端分页实现方法 在Vue中实现前端分页通常涉及数据分割和页面控制逻辑。以下是常见的实现方式: 使用计算属性分页 通过计算属性对数据进行切片处理: computed: { paginatedD…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue 实现toast

vue 实现toast

vue 实现 toast 的方法 在 Vue 中实现 Toast 提示功能可以通过多种方式,以下是几种常见的实现方法: 使用第三方库 Vue 生态中有许多成熟的 Toast 库,例如 vue-toa…