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 Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路