nuxt3 路由相关

普通路由

Nuxt没有router.js,会自动为 ~/pages/ 目录中的每个页面创建一个路由

-| 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'}]}
]

路由信息

想为路由中添加信息,可使用以下方法

<script setup lang="ts">
definePageMeta({title: 'My home page',a: 'aaa',b: 'bbb',
})
</script>

注:definePageMeta方法中除了validate、redirect、name、path、alias、pageTransition、layoutTransition、key、keepalive、layout、middleware、scrollToTop以外的字段都会被放入route.meta

动态路由

下边页面结构生成的路由是/users-{group}/{id},如/users-admins/123

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

在页面中,可以用params获取

<script setup>const route = useRoute()console.log(route.params.group) // adminsconsole.log(route.params.id) // 123
</script>

全覆盖路由

[...slug].vue会匹配该路径下的所有路由

下边页面结构生成的路由是/users/{slug},如/users/123

-| pages/
---| users/
-----| [...slug].vue

在页面中,可以用params获取

<script setup>const route = useRoute()console.log(route.params.slug) // 123
</script>

路由重定向

<script setup>
definePageMeta({redirect: '/home'
})
</script>

自定义路由(vueRouter风格)

Nuxt 3提供了 pages:extend 钩子,允许完全更改Nuxt自动生成的路由,我们可以通过该钩子实现vue-router路由方案(适合老项目迁移,并不是很推荐这样用)

  1. 首先创建router/index.ts文件

    import type { NuxtPage } from "nuxt/schema";
    import routerList from "./module/index";
    const path = require("path");const childrenRouter: NuxtPage[] = [{path: "",name: "home",file: path.resolve("pages/home/index.vue"),meta: {aaa: 'aaa',bbb: 'bbb',}},...
    ]
    export default router;
    
  2. 创建钩子函数

    import router from "./router/index";
    export default defineNuxtConfig({hooks: {"pages:extend": (routes) => {// 清空Nuxt.js自动生成的路由routes.splice(0);// // 重新将自定义路由配置设置进去routes.push(...(router as NuxtPage[]));},},
    })
    

路由钩子

推荐使用middleware实现路由钩子,如果不想使用,plugins+useRouter().beforeEach也可以模拟出同样的效果

middleware

路由钩子实际是通过middleware实现的

  1. 创建中间件文件夹middleware(和pages同级)

  2. 在middleware文件夹中创建文件’xxx.ts’

    export default defineNuxtRouteMiddleware(async (to, from) => {if (process.server) {...}; // 服务端执行的操作if (process.client) {...}; // 客户端执行的操作...if (to.name === 'home') return navigateTo('/index');return;
    })
    

    middleware默认在服务器和浏览器中都会执行一遍

    if (process.server) {...} 服务器中执行
    if (process.client) {...} 浏览器中执行

    abortNavigation() 阻止导航继续前进

    return navigateTo(xxx) 跳转到该路由(注意要return)

plugins+useRouter().beforeEach

通过插件(plugins)注册beforeEach实现

Nuxt提供的useRouter函数(SSR友好)中,可以配置beforeEach,可以通过插件注入的形式来添加beforeEach全局守卫

export default defineNuxtPlugin((nuxtApp) => {const router = useRouter();router.beforeEach(async (to, from, next) => {if (process.server) {...}; // 服务端执行的操作if (process.client) {...}; // 客户端执行的操作...next()}
})

全局钩子

如果文件名中带有“.global.”,则该文件为**全局中间件**,如“xxx.global.ts”

局部钩子

1. 全局中间件创建后会自动执行2. 非全局中间件,需要在对应的页面中注册才可使用```Plain Text
<script setup lang="ts">definePageMeta({middleware: ["auth"] // middleware->auth.ts})
</script>
```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】怎么确保一个集合不能被修改

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 示例&#xff1a; 不可修改的List&#xff1a; 不可修改的Set&#xff1a; 不可修改的Map&#xff1a; 结语 我的其他博…

SpringBoot 如何增强PageHelper入参的健壮性

PageHelper.startPage(int pageNum, int pageSize, boolean count) 参数为外部输入&#xff0c;故存在异常输入场景。比如 pageNum 和 pageSize 输入的值 负数 或者 0&#xff0c;所以引入PageUtils来对入参进行判断矫正&#xff0c;从而避免引入异常。 第1步&#xff1a;支持…

conda新建、配置python3.8虚拟环境,torch-cuda1.8,torchtext0.9.0,huggingface安装transformers库

起因是我在用bert的时候&#xff0c;导包报错 Python 环境缺少 importlib.metadata 模块。importlib.metadata 是 Python 3.8 引入的模块&#xff0c;而我的环境中使用的 Python 版本为 3.7。所以我得重新配置一个python3.8的环境 准备工作 在开始菜单找到anaconda prompt(an…

Vscode中的node.js的安装与使用

前往官网下载安装包 Node.js 中文网 选择较为稳定的版本 安装全选下一步就好了&#xff0c;这里可以选择配置环境变量是否自动启动node.js 在控制台输入指令如果出现了版本号就代表成功了

JavaScript高级程序设计读书记录(五):Object,Array

1. Object 到目前为止&#xff0c;大多数引用值的示例使用的是 Object 类型。Object 是 ECMAScript 中最常用的类型之一。虽然 Object 的实例没有多少功能&#xff0c;但很适合存储和在应用程序间交换数据。 显式地创建 Object 的实例有两种方式。第一种是使用 new 操作符和 …

flex布局(3)

九、骰子 *{margin:0;padding: 0;box-sizing: border-box; } .flex{display: flex;flex-flow: row wrap;justify-content: space-between;align-items: center;align-content: space-between;padding:20px; } .touzi{width: 120px;height: 120px;background-color: aliceblue;…

基础数据结构之顺序表练习

1.给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums = [1,2,3] 输出:6 示例 2: 输入:nums = [1,2,3,4] 输出:24 示例 3: 输入:nums = [-1,-2,-3] 输出:-6 提示: 3 <= nums.length <= 104 -1000 <= nums[i]…

Java网络爬虫--HttpClient

目录标题 技术介绍有什么优点&#xff1f;怎么在项目中引入&#xff1f; 请求URLEntityUtils 类GET请求带参数的GET请求POST请求 总结 技术介绍 HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、功能丰富的、支持 HTTP 协议的客户端编程工具包。相…

开启Android学习之旅-6-实战答题App

不经过实战&#xff0c;看再多理论&#xff0c;都是只放在笔记里&#xff0c;活学活用才是硬道理。同时开发应用需要循序渐进&#xff0c;一口气规划300个功能&#xff0c;400张表&#xff0c;会严重打击自己的自信。这里根据所学的&#xff0c;开发一个答题App。 题库需求分析…

QML 模型视图

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 对于 GUI 应用程序来说,我们通常需要格式化数据并进行显示,而 QML 提供了一种很便利的显示方式 - Model-View-Delegate(简称:MVD)。该模式是 Model-View-Controller(简称:MVC)的一种变体,常被用于分…

HackTheBox - Medium - Linux - Awkward

Awkward Awkward 是一款中等难度的机器&#xff0c;它突出显示了不会导致 RCE 的代码注入漏洞&#xff0c;而是 SSRF、LFI 和任意文件写入/追加漏洞。此外&#xff0c;该框还涉及通过不良的密码做法&#xff08;例如密码重用&#xff09;以及以纯文本形式存储密码来绕过身份验…

vue列表渲染-v-for指令,vue事件处理,数据双向绑定,表单控制

es6对象语法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"./js/vue.js"></script> </head> <body></body> <script&…

【Spring Boot 3】【数据源】自定义JPA多数据源

【Spring Boot 3】【数据源】自定义JPA多数据源 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…

力扣:18.四数之和

一、做题链接&#xff1a;18. 四数之和 - 力扣&#xff08;LeetCode&#xff09; 二、题目分析 1.做这一道题之前本博主建议先看上一篇《三数之和》 2.题目分析 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重…

C++自增运算符与类型转换

C中的自增和自减运算符分别是"“和”–"。这些运算符可以用于递增或递减一个变量的值。 自增运算符 () int x 5; x; // 这等同于 x x 1; // 现在 x 的值为 6自减运算符 (–) int y 10; y--; // 这等同于 y y - 1; // 现在 y 的值为 9这些运算符可以前置或后置…

计算机毕业设计 基于SpringBoot的项目申报系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

程序媛的mac修炼手册-- 终端(terminal)常用命令

「终端&#xff08;terminal&#xff09;」相当于macOS的一个 App &#xff0c;它的特殊之处是&#xff0c;它是管理其它App的App&#xff0c;操作主要通过命令行界面 (CLI) 。 相比于我们日常熟悉的用户界面&#xff08;User Interface&#xff0c;UI&#xff09;&#xff0c…

Redis 主从、哨兵和分片集群简单介绍

Redis 主从集群架构 单节点 redis 并发能力有上限&#xff0c;要进一步提高 redis 并发能力&#xff0c;就要搭建主从集群&#xff0c;实现读写分离 主从同步原理 Replicaition id&#xff1a;每台 master 机器都一个 repl_id&#xff0c;是数据集的表示&#xff0c;若 salv…

软件测试|如何在Pycharm中配置文件头部信息

简介 PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;在开发过程中&#xff0c;我们经常需要在代码文件的开头添加固定的文件说明信息&#xff0c;例如版权声明、作者信息、创建日期等。手动添加这些信息可能会很繁琐&#xff0c;但是PyCh…

[Vulnhub靶机] DriftingBlues: 5

[Vulnhub靶机] DriftingBlues: 5靶机渗透思路及方法&#xff08;个人分享&#xff09; 靶机下载地址&#xff1a; https://download.vulnhub.com/driftingblues/driftingblues5_vh.ova 靶机地址&#xff1a;192.168.67.24 攻击机地址&#xff1a;192.168.67.3 一、信息收集 …