返回

Vue 3 中的 <router-link> 扩展,突破应用程序导航的限制

前端

的局限

在Vue 3中, 组件是导航的得力助手,可以轻松实现单页面应用程序的组件间跳转,但面对外部链接时,它就不灵光了。此时,我们不得不依靠传统的 标签。这实在是个美中不足的问题,毕竟对于用户而言,点击任何链接都是一种导航操作,不应该因为内部链接或外部链接而区别对待。

扩展 Vue Router,提升导航能力

我们可以通过以下步骤扩展 Vue Router,使其能够轻松导航至外部链接:

  1. 安装 vue-router-external-link

    npm install --save vue-router-external-link
    
  2. 注册扩展插件

    在 Vue 实例中注册 vue-router-external-link 插件:

    import Vue from 'vue';
    import VueRouter from 'vue-router';
    import VueRouterExternalLink from 'vue-router-external-link';
    
    Vue.use(VueRouter);
    Vue.use(VueRouterExternalLink);
    
  3. 使用 v-external-link 指令

    现在,你可以在 <router-link> 标签上使用 v-external-link 指令来指定外部链接:

    <router-link v-external-link to="https://www.google.com">Google</router-link>
    

这样,当点击 <router-link> 链接时,就会在浏览器中打开外部网站。

通过路由守卫来管控外部链接

除了使用 v-external-link 指令外,你还可以通过路由守卫来控制应用程序的导航行为。这可以让你在用户点击链接之前拦截它,并执行一些自定义操作,例如弹出确认对话框或记录点击日志。

全局路由守卫

全局路由守卫可以拦截所有导航请求。你可以使用 router.beforeEach 守卫来实现:

router.beforeEach((to, from, next) => {
  if (to.meta.external) {
    // 外部链接,执行自定义操作
    // ...
  }

  next();
});

路由组件守卫

路由组件守卫可以拦截特定组件的导航请求。你可以使用 beforeRouteEnter 守卫来实现:

export default {
  beforeRouteEnter(to, from, next) {
    if (to.meta.external) {
      // 外部链接,执行自定义操作
      // ...
    }

    next();
  },
};

丰富导航信息,提升用户体验

在 Vue Router 中,你可以使用路由元数据来为导航链接添加额外的信息。这有助于你更好地控制导航行为,并为用户提供更丰富的导航体验。

const routes = [
  {
    path: '/about',
    component: About,
    meta: {
      title: '关于我们',
      description: '了解我们的公司和团队',
      icon: 'mdi-information'
    }
  },
];

这些元数据可以在模板中使用,以显示导航链接的标题、和图标。

结语

通过扩展 Vue Router,我们提升了应用程序的导航能力,使之能够轻松导航至外部链接。同时,我们还学习了如何使用路由守卫来控制导航行为,以及如何使用路由元数据来为导航链接添加额外的信息。这些技巧可以帮助你构建更加用户友好的 Vue 应用程序。