기술나눔

vue에서 경로 인터셉터의 역할에 대해 자세히 이야기해 보겠습니다.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Vue에서 경로 인터셉터는 주로 특정 경로로 이동하기 전이나 특정 경로를 떠날 때 가로채서 처리하는 데 사용됩니다. 이 메커니즘을 통해 개발자는 경로 탐색이 발생하기 전이나 후에 권한 확인, 데이터 로드, 페이지 이동 등과 같은 특정 논리를 수행할 수 있습니다.

Vue Router에서는 다음과 같은 방법으로 경로 인터셉터를 구현할 수 있습니다.

  1. 글로벌 비포 가드:

    • router.beforeEach(to, from, next): 전역 사전 가드를 등록합니다. 경로 탐색이 실행되면 경로가 변경되기 전에 가드가 호출됩니다.
    • 목적: 전역 권한 확인, 페이지 로딩 진행률 표시줄 제어 등에 적합합니다.
      1. router.beforeEach((to, from, next) => {
      2. // 检查用户权限
      3. if (!userAuthenticated) {
      4. next('/login'); // 未认证跳转到登录页
      5. } else {
      6. next(); // 已认证则放行
      7. }
      8. });

2. 글로벌 리졸브 가드:

  • router.beforeResolve(to, from, next): 글로벌 프론트 가드 이후 탐색이 확인되기 전에 호출되는 글로벌 파싱 가드를 등록합니다.
    1. router.beforeResolve((to, from, next) => {
    2. // 在导航被确认之前,进行数据加载等操作
    3. fetchData().then(() => {
    4. next();
    5. });
    6. });

3. 경로별 가드:

  • 라우팅 구성 객체에 직접 추가beforeEnter단일 경로에 보호 논리를 추가하는 필드입니다.
  1. const route = {
  2. path: '/profile',
  3. component: Profile,
  4. beforeEnter: (to, from, next) => {
  5. // 检查用户是否有权限访问该路由
  6. if (userHasAccess) {
  7. next();
  8. } else {
  9. next('/403'); // 没有权限跳转到403页面
  10. }
  11. }
  12. };

 

4. 구성요소 내 가드:

  • 내부 구성 요소에 사용됨beforeRouteEnterbeforeRouteUpdate, 그리고beforeRouteLeave후크 함수, 이러한 함수는 경로가 현재 구성 요소로 이동할 때, 현재 구성 요소를 재사용할 때, 현재 구성 요소가 떠날 때 호출됩니다.
  1. export default {
  2. beforeRouteEnter (to, from, next) {
  3. // 在路由导航进入该组件前执行逻辑
  4. next(vm => {
  5. // 可以访问实例 `vm`
  6. });
  7. },
  8. beforeRouteUpdate (to, from, next) {
  9. // 在当前路由改变,但是该组件被复用时调用
  10. // 可以访问组件实例 `this`
  11. // 通常用于更新组件的数据
  12. next();
  13. },
  14. beforeRouteLeave (to, from, next) {
  15. // 在导航离开该组件的对应路由时调用
  16. // 可以访问组件实例 `this`
  17. next();
  18. }
  19. }

이러한 경로 인터셉터의 메커니즘은 개발자가 다양한 수준 및 시나리오에서 애플리케이션의 탐색 프로세스를 제어하고 권한 제어, 데이터 사전 로드 및 페이지 점프와 같은 기능을 구현하는 데 도움이 되므로 프런트엔드 애플리케이션의 대화형 경험을 더 잘 관리하고 최적화할 수 있습니다.