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


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

相关推荐
kyson_3 分钟前
前端性能优化全链路实践指南:从网络、缓存到渲染与监测
前端
前端fighter5 分钟前
线上崩溃?使用 TRAE Work 5分钟把混淆日志翻译成人话并输出复盘报告
前端·vue.js·程序员
网安蟹佬霸12 分钟前
CTF Web方向解题全攻略:从信息收集到getshell(附实战payload与脚本)
android·前端·网络·安全·web安全·网络安全·网安
前端玩坑坑17 分钟前
CSS Container Queries 容器查询入门教程
前端
带多刺的玫瑰21 分钟前
Leecode#4刷题之寻找两个正序数组的中位数
java·前端·算法
qq_2676128923 分钟前
项目集、里程碑与迭代联动:Gitee项目管理如何支撑多团队规模化交付与进度风险治理
前端·gitee
赵广陆36 分钟前
企业实战:Web服务端搭建
前端·langchain·langgraph
常宇佳39 分钟前
vue3 实战系列之无法识别vue组件
前端·javascript·vue.js
掘金者阿豪1 小时前
Codex 怎么突然变慢了?一个需求跑几十分钟,我才发现它的工作方式已经变了
前端·后端
用户931456355661 小时前
从 3 秒到 300 毫秒:一次真实的前端首屏性能优化全记录
前端