入门篇二: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 怎么帮我们自动导入组件。


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

相关推荐
wangruofeng4 小时前
2026 Web 技术选型指南,AI 时代如何选择适合项目的技术栈
前端·aigc·ai编程
honkun64 小时前
vue 表格组件 vxe-table 修改滚动条样式,修改滚动条样式,统一宽度、颜色与自动隐藏
前端·javascript·vue.js
爱勇宝5 小时前
研究数字孪生的这半年,做了个 Demo,也有了一些新想法
前端·程序员
不可能片场5 小时前
工程实践 一个缓存把选片从十分钟压到一分钟
前端·electron
前端小万5 小时前
探索副业五个月,最终以放弃告终
前端·后端·面试
FRing035 小时前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
171320330计算机毕设编程5 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计
葡萄城技术团队6 小时前
在 SpreadJS 里新增右键菜单,把业务动作放到用户手边
前端
大明二代6 小时前
从 RAG 到有记忆的 Agent:Mastra Memory 与 PostgreSQL 实战
前端·javascript·人工智能
deli0076 小时前
代码截图一键出 PNG 实测:3 种窗口风格,长行超 95 字符会被裁
前端