入门篇二:Nuxt 4路由自动生成:告别手动配置路由的日子

目录

一、开启路由功能

二、基础路由:文件即路由

三、动态路由:用方括号搞定

[四、嵌套路由:目录 + 文件的组合](#四、嵌套路由:目录 + 文件的组合)

五、路由导航:NuxtLink

六、编程式导航

总结


写过 Vue Router 的同学一定有过这样的体验:每新建一个页面,就要去 router/index.js 里手动加一条路由配置。页面一多,路由配置文件又长又乱,改起来还容易出错。Nuxt 带来了一个好消息------路由自动生成 !只需要在 pages 目录下创建文件,路由就自动生成了。今天就来看看这个"偷懒神器"怎么用。

一、开启路由功能

还记得上一篇文章里,我们的项目根目录只有一个 app.vue 吗?要启用路由功能,需要创建 pages 目录:

复制代码
mkdir pages

然后修改 app.vue,添加 <NuxtPage /> 组件:

复制代码
<template>
  <div>
    <NuxtPage />
  </div>
</template>

<NuxtPage /> 是 Nuxt 内置的路由出口组件,相当于 Vue Router 里的 <router-view />

二、基础路由:文件即路由

现在来创建几个页面,感受一下路由自动生成的魔力。

创建 pages/index.vue(首页):

复制代码
<template>
  <div class="page">
    <h1>首页</h1>
    <p>欢迎来到我的网站</p>
    <NuxtLink to="/about">关于我们</NuxtLink>
  </div>
</template>

<style scoped>
.page {
  padding: 2rem;
}
</style>

创建 pages/about.vue(关于页):

复制代码
<template>
  <div class="page">
    <h1>关于我们</h1>
    <p>这是一个 Nuxt 4 学习项目</p>
    <NuxtLink to="/">返回首页</NuxtLink>
  </div>
</template>

现在启动项目,访问 / 看到首页,访问 /about 看到关于页。完全没有配置路由文件,是不是很神奇?

Nuxt 会根据 pages 目录下的文件自动生成路由:

文件路径 路由路径
pages/index.vue /
pages/about.vue /about
pages/users.vue /users
pages/users/profile.vue /users/profile

三、动态路由:用方括号搞定

很多时候我们需要动态路由,比如文章详情页 /article/123。Nuxt 用方括号语法来实现:

创建 pages/article/[id].vue

复制代码
<script setup lang="ts">
const route = useRoute()
const articleId = route.params.id
</script>

<template>
  <div class="page">
    <h1>文章详情</h1>
    <p>文章ID:{{ articleId }}</p>
    <NuxtLink to="/">返回首页</NuxtLink>
  </div>
</template>

现在访问 /article/123/article/abc 都能正常显示,id 会自动从 URL 中提取。

💡 多个参数pages/article/[id]-[slug].vue 可以匹配 /article/123-my-title

四、嵌套路由:目录 + 文件的组合

嵌套路由在后台管理系统很常见,比如左侧菜单固定,右侧内容切换。Nuxt 用同名目录 + 文件的方式实现:

创建目录结构:

复制代码
pages/
├── users/
│   ├── index.vue      # /users
│   ├── profile.vue    # /users/profile
│   └── settings.vue   # /users/settings
└── users.vue          # 用户模块布局

pages/users.vue(父级布局):

复制代码
<template>
  <div class="users-layout">
    <nav class="sidebar">
      <NuxtLink to="/users">用户列表</NuxtLink>
      <NuxtLink to="/users/profile">个人资料</NuxtLink>
      <NuxtLink to="/users/settings">设置</NuxtLink>
    </nav>
    <main class="content">
      <NuxtPage />
    </main>
  </div>
</template>

<style scoped>
.users-layout {
  display: flex;
}

.sidebar {
  width: 200px;
  padding: 1rem;
  border-right: 1px solid #eee;
}

.sidebar a {
  display: block;
  padding: 0.5rem;
  color: #333;
  text-decoration: none;
}

.sidebar a:hover {
  background: #f5f5f5;
}

.content {
  flex: 1;
  padding: 1rem;
}
</style>

pages/users/index.vue

复制代码
<template>
  <div>
    <h2>用户列表</h2>
    <p>这里是所有用户的列表...</p>
  </div>
</template>

现在访问 /users/users/profile/users/settings,左侧菜单固定,右侧内容切换,典型的嵌套路由效果。

页面间跳转使用 <NuxtLink>,它是 Nuxt 对 <router-link> 的封装:

复制代码
<!-- 基础用法 -->
<NuxtLink to="/about">关于我们</NuxtLink>

<!-- 带参数 -->
<NuxtLink :to="`/article/${article.id}`">{{ article.title }}</NuxtLink>

<!-- 外部链接(自动添加 target="_blank") -->
<NuxtLink to="https://nuxt.com" external>访问 Nuxt 官网</NuxtLink>

<!-- 激活状态样式 -->
<NuxtLink to="/about" active-class="active">关于我们</NuxtLink>

<NuxtLink> 内置了预加载功能:当链接进入视口时,会自动预加载目标页面,点击后瞬间显示,用户体验超棒。

六、编程式导航

有时需要在 JavaScript 中跳转,使用 navigateTo 函数:

复制代码
<script setup lang="ts">
const goHome = () => {
  navigateTo('/')
}

const goArticle = (id: number) => {
  navigateTo(`/article/${id}`)
}
</script>

<template>
  <button @click="goHome">返回首页</button>
  <button @click="goArticle(123)">查看文章</button>
</template>

总结

今天我们学习了 Nuxt 的路由系统:

功能 实现方式
基础路由 pages/xxx.vue/xxx
动态路由 pages/[id].vue/:id
嵌套路由 pages/users.vue + pages/users/ 目录
页面跳转 <NuxtLink to="...">
编程导航 navigateTo('/path')

记住一句话:pages 目录下的文件结构,就是你的路由结构。再也不用手写路由配置了,开发效率直接起飞!

下一篇文章,我们来聊聊组件的组织方式,看看 Nuxt 怎么帮我们自动导入组件。


觉得有用的话,点赞、在看、分享支持下!有问题评论区见 💪

相关推荐
candyTong2 小时前
一觉醒来,大模型就帮我排查完页面性能问题
前端·javascript·架构
魔术师Grace2 小时前
我给 AI 做了场入职培训
前端·程序员
玩嵌入式的菜鸡3 小时前
网页访问单片机设备---基于mqtt
前端·javascript·css
前端一小卒3 小时前
我用 Claude Code 的 Superpowers 技能链写了个服务,部署前差点把服务器搞炸
前端·javascript·后端
深海鱼在掘金4 小时前
深入浅出 LangChain —— 第二章:环境搭建与快速上手
人工智能·typescript·langchain
滑雪的企鹅.4 小时前
HTML头部元信息避坑指南大纲
前端·html
一拳不是超人4 小时前
老婆天天吵吵要买塔罗牌,我直接用 AI 2 小时写了个在线塔罗牌
前端·ai编程
阿丰资源6 小时前
SpringBoot+Vue实战:打造企业级在线文档管理系统
vue.js·spring boot·后端
excel6 小时前
如何解决 Nuxt DevTools 中关于 unstorage 包的报错
前端
Rust研习社6 小时前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust