vite vue3 import.meta.glob动态路由

在Vite中使用Vue 3,你可以使用import.meta.glob来导入目录下的多个Vue组件,并自动生成路由。以下是一个简单的例子:

router/index.js


// router/index.js
import { createRouter, createWebHistory } from 'vue-router';
 
// 自动导入views目录下的所有.vue文件
const modules = import.meta.glob('/src/views/*.vue');
 
const routes = Object.keys(modules).map((path) => {
  const componentName = path.split('/').pop().split('.')[0];
  return {
    path: `/${componentName=='HomeView'?'/':componentName}`,
    component: modules[`${path}`].default || modules[`${path}`],
  };
});
 
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes,
});
 
export default router;

App.vue

<script setup>
import { RouterLink, RouterView } from 'vue-router'
import HelloWorld from './components/HelloWorld.vue'
</script>

<template>
  <header>
    <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />

    <div class="wrapper">
      <HelloWorld msg="You did it!" />

      <nav>
        <RouterLink to="/">Home</RouterLink>
        <RouterLink to="/AboutView">About</RouterLink>
      </nav>
    </div>
  </header>

  <RouterView />
</template>

<style scoped>
header {
  line-height: 1.5;
  max-height: 100vh;
}

.logo {
  display: block;
  margin: 0 auto 2rem;
}

nav {
  width: 100%;
  font-size: 12px;
  text-align: center;
  margin-top: 2rem;
}

nav a.router-link-exact-active {
  color: var(--color-text);
}

nav a.router-link-exact-active:hover {
  background-color: transparent;
}

nav a {
  display: inline-block;
  padding: 0 1rem;
  border-left: 1px solid var(--color-border);
}

nav a:first-of-type {
  border: 0;
}

@media (min-width: 1024px) {
  header {
    display: flex;
    place-items: center;
    padding-right: calc(var(--section-gap) / 2);
  }

  .logo {
    margin: 0 2rem 0 0;
  }

  header .wrapper {
    display: flex;
    place-items: flex-start;
    flex-wrap: wrap;
  }

  nav {
    text-align: left;
    margin-left: -1rem;
    font-size: 1rem;

    padding: 1rem 0;
    margin-top: 1rem;
  }
}
</style>

 

在上面的代码中,import.meta.glob用于获取/src/views/目录下所有的.vue文件。然后,我们遍历这些模块,通过它们的路径生成路由。这样,你只需要将组件放入views目录,无需手动向路由器添加每个组件。

相关推荐

  1. Vue3-40-- 动态

    2024-03-30 06:58:04       29 阅读
  2. vue3如何实现动态

    2024-03-30 06:58:04       43 阅读
  3. vue3动态

    2024-03-30 06:58:04       18 阅读
  4. 6-动态

    2024-03-30 06:58:04       10 阅读
  5. vue3+vite动态的实现方式

    2024-03-30 06:58:04       48 阅读
  6. 【Spring Boot 3】【Camel 4】动态

    2024-03-30 06:58:04       22 阅读
  7. vue3之带参数的动态

    2024-03-30 06:58:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 06:58:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 06:58:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 06:58:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 06:58:04       18 阅读

热门阅读

  1. spark DataFrame通过JDBC读写数据库(MySQL示例)

    2024-03-30 06:58:04       15 阅读
  2. npm包发布

    2024-03-30 06:58:04       20 阅读
  3. Node.js常用命令详解

    2024-03-30 06:58:04       15 阅读
  4. 在axios中设置方法防止http重复请求

    2024-03-30 06:58:04       17 阅读
  5. SqlSugar快速入门

    2024-03-30 06:58:04       17 阅读
  6. qt之windows库编译

    2024-03-30 06:58:04       20 阅读
  7. MYSQL分区

    2024-03-30 06:58:04       17 阅读
  8. 关于debian如何使用lb-build构建iso

    2024-03-30 06:58:04       18 阅读
  9. 开源 | 星星充电、特来电和云快充如何赚钱?

    2024-03-30 06:58:04       48 阅读