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

相关文章

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

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

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

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

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多