Nuxt3入门:路由系统(第4节)

2024-09-02 02:36
文章标签 系统 入门 路由 nuxt3

本文主要是介绍Nuxt3入门:路由系统(第4节),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。

Nuxt 的一个核心功能是文件系统路由器,路由是根据文件自动注册的,Nuxt 为在 pages/ 目录下的每个 Vue 文件 创建相应的路由(或 URL)。

一、用法

页面是 Vue 组件,可以具有 Nuxt 支持的任何有效扩展,默认情况下是 .vue,也可以是 .js .jsx .mjs. ts .tsx

Nuxt 将自动为 pages 目录的下每个页面创建一个路由。

pages/index.vue

<template><h1>Index page</h1>
</template>

pages/index.ts

// 渲染函数
export default defineComponent({render() {return h("h1", "Index page");},
});

pages/index.tsx

export default defineComponent({render() {return <h1>Index page</h1>;},
});

生成的路由文件:

{"routes": [{"path": "/","component": "pages/index.vue"}]
}

如果您正在使用 app.vue,请确保使用组件以显示当前页面:

<template><div><NuxtPage /></div>
</template>

页面 必须具有单个根元素,以允许页面之间的路由转换。

二、导航

要在应用程序的页面之间导航,你应该使用 <NuxtLink> 组件。此该组件属于 Nuxt 默认组件,因此不用导入,可以直接使用。

app.vue

<template><header><nav><ul><li><NuxtLink to="/about">About</NuxtLink></li><li><NuxtLink to="/posts/1">Post 1</NuxtLink></li><li><NuxtLink to="/posts/2">Post 2</NuxtLink></li></ul></nav></header>
</template>

三、编程式导航

除了使用 <NuxtLink> 组件进行导航,也可以使用 navigateTo 进行编程式导航。

<script setup lang="ts">
const name = ref('');
const type = ref(1);function navigate(){return navigateTo({path: '/search',query: {name: name.value,type: type.value}})
}
</script>

四、路由参数

使用 useRoute() 可以在 Vue 组件中访问当前路由的详细信息。

<script setup lang="ts">const route = useRoute();// 当访问 /posts/1 时, route.params.id 将会是1console.log(route.params.id);
</script>

四、动态路由

如果你在方括号内放置任何内容,它将被转换为动态路由参数。

如果希望参数是可选的,则必须将其括在双方括号中。

-| pages/
---| index.vue
---| users-[group]/
-----| [id].vue

鉴于上面的示例,你可以通过 $route 对象访问组件中的 group/id。

pages/users-[group]/[id].vue

<template><p>{{ $route.params.group }} - {{ $route.params.id }}</p>
</template><script setup lang="ts">const route = useRoute();console.log(route.params.group); // groupconsole.log(route.params.id); // id
</script>

如果导航到 /users-admins/123,页面将显示:

<template><p>admins - 123</p>
</template><script setup lang="ts">const route = useRoute();console.log(route.params.group); // adminsconsole.log(route.params.id); // 123
</script>

五、嵌套路由

注意使用 <NuxtPage> 组件来渲染子页面。

目录结构:

-| pages/
---| parent/
------| child.vue
---| parent.vue

生成的路由文件:

[{path: "/parent",component: "~/pages/parent.vue",name: "parent",children: [{path: "child",component: "~/pages/parent/child.vue",name: "parent-child",},],},
];

pages/parent.vue

<template><div><h1>I am the parent view</h1><NuxtPage :foobar="123" /></div>
</template>

pages/parent/child.vue

<script setup lang="ts">const props = defineProps(["foobar"]);console.log(props.foobar);
</script>

六、路由元信息

你可能希望为应用程序中的每个路由定义元数据,可以使用 definePageMeta()宏 执行此操作。该函数接受一个对象,meta 是其中的一个属性。

definePageMeta({meta: {title: "My Page",description: "This is my page",},
});

然后,可以在应用程序的其余部分使用 route.meta 访问此数据。

<script setup lang="ts">const route = useRoute() console.log(route.meta.title) // My home page
</script>

七、路由中间件

Nuxt 提供了一个可自定义的路由中间件框架,你可以在整个应用程序中使用,非常适合在导航到特定路由之前提取要运行的代码。

路由中间件有三种:

  • 匿名(或内联)路由中间件,直接在使用它们的页面中定义。
  • 命名路由中间件,它们被放置在 middleware/ 目录中,当在页面上使用时,将通过异步导入自动加载。(注意:路由中间件名称被规范化为 kebab-case,因此 someMiddleware 将被转换为 some-middleware)。
  • 全局路由中间件,它们被放置在 middleware/ 目录(带后缀),并将在每次路由更改时自动运行。

自定义内联中间件

<script setup lang="ts">
definePageMeta({middleware: [function (to, from) {// 处理逻辑},'auth']
})
</script>

命名路由中间件:pages/index.vue

<script setup lang="ts">definePageMeta({middleware: "auth",});
</script><template><h1>Welcome to your dashboard</h1>
</template>

全局路由中间件:middleware/auth.ts

export default defineNuxtRouteMiddleware((to, from) => {// 检查用户是否登录if (!isAuthenticated) {return navigateTo("/login");}
});

八、路由验证

Nuxt 可以通过 definePageMeta() 中的 validate 方法验证每个页面。
该属性接受 route 作为参数。你可以返回一个布尔值,以确定路由是否合法。

这是否是要使用此页面呈现的有效路由。如果返回 ,但找不到另一个匹配项,则会导致 404 错误。您也可以直接返回带有 / 的对象,以立即响应错误(不会检查其他匹配项)。validateroutefalsestatusCodestatusMessage
如果您有更复杂的用例,则可以改用匿名路由中间件。

pages/posts/[id].vue

<script setup lang="ts">definePageMeta({validate: async (route) => {// 对 id 进行校验return (typeof route.params.id === "string" && /^\d+$/.test(route.params.id));},});
</script>

好了,分享结束,谢谢点赞,下期再见!

这篇关于Nuxt3入门:路由系统(第4节)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128755

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系