Vue3 监听路由变化

  1. 方法一:使用 watch 函数监听 route 对象 在 Vue 3 中,可以使用 watch 函数来监听route 对象的变化,从而实现实时获取路由变化。
    这种方式适用于在组件内部监听路由变化,并执行相应操作。
import { watch } from 'vue';
import { useRoute } from 'vue-router';

export default {
  setup() {
    const route = useRoute();

    // 监听路由变化
    watch(
      () => route,
      (newRoute, oldRoute) => {
        console.log('Route changed:', newRoute, oldRoute);
        // 在这里可以执行路由变化时需要做的任何逻辑
      },
      { deep: true, immediate: true }
    );

    // 返回需要使用的响应式数据和其他函数
  }
}

这里的 deep 参数表示深观察,因为 route 对象是一个嵌套的对象,所以需要启用深观察才能捕捉到其内部属性的变化。immediate 参数表示是否立即执行监听器。

  1. 方法二:使用 onBeforeRouteUpdate 导航守卫
    Vue Router 也为开发者提供了一个名为 onBeforeRouteUpdate 的生命周期钩子,可以在当前路由改变复用组件时调用。这意味着当路由改变但是它所对应的组件被重用时,会触发此钩子。
mport { onBeforeRouteUpdate } from 'vue-router';

export default {
  setup() {
    onBeforeRouteUpdate((to, from) => {
      console.log(`Route is about to change from ${from} to ${to}`);
      // 在这里可以执行路由变化前需要做的任何逻辑
    });
  }
};
  1. 方法三:监听 router.currentRoute.value.path
    直接监听 router.currentRoute.value.path,这种方法同样可以达到监听路由变化的目的。
import { watch } from 'vue';
import { useRouter } from 'vue-router';

export default {
  setup() {
    const router = useRouter();
    
    // 监听当前路由路径的变化
    watch(
      () => router.currentRoute.value.path,
      (newPath, oldPath) => {
        console.log(`Current path changed from ${oldPath} to ${newPath}`);
      },
      { immediate: true }
    );
  }
};

如果只需要在当前组件内监听路由变化,推荐使用 watch 函数;如果需要在路由变化前做某些处理,则 onBeforeRouteUpdate 是更好的选择。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容