Nuxt.js 路由管理:useRouter 方法与路由中间件应用

news/2024/11/15 21:31:20/文章来源:https://www.cnblogs.com/Amd794/p/18328597

title: Nuxt.js 路由管理:useRouter 方法与路由中间件应用
date: 2024/7/28
updated: 2024/7/28
author: cmdragon

excerpt:
摘要:本文介绍了Nuxt 3中useRouter方法及其在路由管理和中间件应用中的功能。内容包括使用useRouter添加、移除路由,获取路由信息,基于History API的操作,导航守卫的实现,如定义匿名、命名及全局中间件,以及使用navigateTo和abortNavigation辅助函数。同时,还涉及Promise和错误处理,最后通过一个示例展示了useRouter的常见用法。

categories:

  • 前端开发

tags:

  • Nuxt.js
  • 路由管理
  • useRouter
  • 中间件
  • 前端开发
  • Vue.js
  • Web开发

image
image

扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长

一、Nuxt 中的 useRouter 方法

useRouter 是 Nuxt 3 提供的一个用于处理路由的重要工具。它让您能够在应用中方便地进行各种路由操作。比如添加路由、导航、路由守卫等。

二、基本功能

  1. addRoute():向路由实例添加新的路由。您可以提供 parentName 将新路由添加为现有路由的子路由。 示例:
const router = useRouter();
router.addRoute({ name: 'newRoute', path: '/newPath', component: NewComponent });
  1. removeRoute():根据名称移除现有路由。 示例:
router.removeRoute('newRoute');
  1. getRoutes():获取所有路由记录的完整列表。 示例:
const routes = router.getRoutes();
  1. hasRoute():检查是否存在具有给定名称的路由。 示例:
const hasRoute = router.hasRoute('newRoute');
  1. resolve():返回路由位置的规范化版本,并包含一个 href 属性,其中包含任何现有的基础路径。 示例:
const resolvedRoute = router.resolve({ name: 'newRoute' });

三、基于 History API 的操作

  1. back():如果可能,返回上一页,与 router.go(-1) 相同。 示例:
router.back();
  1. forward():如果可能,前进到下一页,与 router.go(1) 相同。 示例:
router.forward();
  1. go():在历史记录中向前或向后移动,不受 router.back() 和 router.forward() 中施加的层次结构限制。 示例:
router.go(3);  // 向前移动 3 步
  1. push():通过将新条目推入历史堆栈来以编程方式导航到新的 URL。建议使用 navigateTo 代替。 示例:
router.push({ path: "/newUrl" });
  1. replace():通过替换当前路由历史堆栈中的当前条目来以编程方式导航到新的 URL。建议使用 navigateTo 代替。 示例:
router.replace({ hash: "#bio" });

四、导航守卫

定义中间件

  1. 匿名(或内联)中间件

    • 直接在页面的 definePageMeta 方法中定义。
    export default {pageMeta: {middleware: ['myMiddleware']}
    }
  2. 命名中间件

    • 放置在 middleware/ 目录下,并在页面中通过异步导入自动加载。
    // 在 `middleware/` 目录下创建文件
    export default defineNuxtRouteMiddleware((to, from) => {// 中间件逻辑
    })
  3. 全局中间件

    • 放置在 middleware/ 目录下,并以 .global 后缀结尾。
    // 在 `middleware/` 目录下创建文件
    export default defineNuxtRouteMiddleware((to, from) => {// 全局中间件逻辑
    })

使用辅助函数

Nuxt.js 提供了两个全局可用的辅助函数来处理导航:

  • navigateTo:用于重定向到给定的路由。

    return navigateTo('/new-route')
  • abortNavigation:用于中止当前的导航。

    return abortNavigation()

返回值

中间件返回的值决定了导航的行为:

  • :不阻止导航,将继续执行下一个中间件函数(如果有的话),或者完成路由导航。
  • navigateTo:重定向到给定的路径,并在服务器端发生重定向时设置重定向代码为 302 Found 或 301 Moved Permanently。
  • abortNavigation:停止当前的导航。
  • abortNavigation(error) :拒绝当前的导航并提供错误信息。

示例

假设我们有一个中间件用于检查用户是否登录,如果未登录则重定向到登录页面:

export default defineNuxtRouteMiddleware((to, from) => {if (!userIsLoggedIn()) {return navigateTo('/login')}
})

注意事项

  • 避免无限循环:在重定向之前检查 to.path 是很重要的,否则可能会导致无限重定向循环。
  • 使用辅助函数:推荐使用 navigateTo 和 abortNavigation 辅助函数来执行重定向或停止导航,以确保与 Nuxt.js 的集成和未来的兼容性。
  • 了解变更风险:尽管 navigateTo 和 abortNavigation 辅助函数是推荐使用的,但其他在 vue-router 文档中描述的返回值可能也能工作。然而,未来 Nuxt.js 可能会对这些返回值进行更改,因此使用官方推荐的方法是最安全的。

五、Promise 和错误处理

  1. isReady():返回一个 Promise,在路由完成初始导航时解析。 示例:
const ready = await router.isReady();
  1. onError:添加一个错误处理程序,每次导航期间发生未捕获的错误时都会调用该处理程序。

六、示例应用

以下是一个简单的 Nuxt 3 应用示例,展示了如何使用 useRouter 的一些常见功能:

// pages/index.vue
<template><div><h1>Nuxt 3 Router Demo</h1><button @click="addNewRoute">Add New Route</button><button @click="removeRoute">Remove Route</button><button @click="goToNewUrl">Go to New URL</button></div>
</template><script setup>const addNewRoute = () => {router.addRoute({ name: 'newRoute', path: '/newPath', component: () => import('./NewComponent.vue') });
};const removeRoute = () => {router.removeRoute('newRoute');
};const goToNewUrl = () => {router.push({ path: '/newPath' });
};
</script>

余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长,阅读完整的文章:Nuxt.js 路由管理:useRouter 方法与路由中间件应用 | cmdragon's Blog

往期文章归档:

  • useRoute 函数的详细介绍与使用示例 | cmdragon's Blog
  • 使用 useRequestURL 组合函数访问请求URL | cmdragon's Blog
  • Nuxt.js 环境变量配置与使用 | cmdragon's Blog
  • 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch | cmdragon's Blog
  • 使用 useRequestEvent Hook 访问请求事件 | cmdragon's Blog
  • 使用 useNuxtData 进行高效的数据获取与管理 | cmdragon's Blog
  • Nuxt 3 使用指南:掌握 useNuxtApp 和运行时上下文 | cmdragon's Blog
  • 使用 useLazyFetch 进行异步数据获取 | cmdragon's Blog
  • 使用 useLazyAsyncData 提升数据加载体验 | cmdragon's Blog
  • Nuxt.js 中使用 useHydration 实现数据水合与同步 | cmdragon's Blog
  • useHeadSafe:安全生成HTML头部元素 | cmdragon's Blog
  • Nuxt.js头部魔法:轻松自定义页面元信息,提升用户体验 | cmdragon's Blog
  • 探索Nuxt.js的useFetch:高效数据获取与处理指南 | cmdragon's Blog
  • Nuxt.js 错误侦探:useError 组合函数 | cmdragon's Blog
  • useCookie函数:管理SSR环境下的Cookie | cmdragon's Blog
  • 轻松掌握useAsyncData获取异步数据 | cmdragon's Blog
  • 使用 useAppConfig :轻松管理应用配置 | cmdragon's Blog

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

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

相关文章

java-01

Java入门 IDEA优化idea插件 翻译、阿里巴巴代码规范指导IDEA debug使用 Step into:单步执行(一行一行代码执行),如果遇到子函数,就会进入子函数,并且继续单步执行。就是每一行需要执行的代码都不跳过,一行一行进行。 Step over:在单步执行的时候,如果遇到子函数,并不…

帝国CMS后台登录错误5次限制的解决办法

第一步,打开 /e/config/config.php 文件找到:loginnum ,这一项,将值由5改大一点即可。loginnum=>5,logintime=>60,logintime 就是锁定时间。扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Jav…

eyoucms如何搬家?易优cms搬家教程

1,本地备份数据库 2,删除install_********目录下的install.lock文件 3,再改名install_1540256968 为install 4,删除data/runtime所有文件夹 5,打包根目录下所有文件,上传空间解压即可安装扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉…

安装界面不能正常显示

错误记录: 安装界面不能正常显示错误原因: 运行环境有问题解决方案: 运行环境有问题,使用记事本打开PHP配置文件php.ini: 设置short_open_tag = On 然后重启apache或iis设置才能生效。扫码添加技术【解决问题,仅需10元起】专注中小企业网站建设、网站安全12年。熟悉各种C…

织梦dedecms数据库连接文件位置

一、织梦CMS(dedecms)的数据库连接文件位置:织梦CMS V5.1 在include\config_base.php织梦CMS V5.3 在\data\common.inc.php织梦CMS V5.5 在\data\common.inc.php织梦CMS V5.6 在\data\common.inc.php织梦CMS V5.7 在\data\common.inc.php 二、织梦CMS(dedecms)的数据库连接文件…

Trends in Plant Science | 植物生物学中的大语言模型

分享一篇来自南洋理工大学Marek Mutwil团队发表在《Trends in Plant Science》上有关植物生物学方向的大语言模型综述:Large language models in plant biology。生物序列本身就是一种自然语言,与LLM是天作之合,实际上生物大模型已有很多开发,只是解释太过复杂,大多是学术…

严建兵 | 玉米基因组育种的理论与实践

来源:第一届全国作物杂种优势与生物育种学术大会,严建兵老师报告《玉米基因组育种的理论与实践》。 声明:本文仅用于学习交流,不用于任何商业用途。文中所有转载的图片、音频、视频文件等知识归该权利人所有。如不慎侵犯权益,请后台联络,我们将第一时间删除。本文来自博客…

Mac 上Idea 获取环境变量失败的问题总结

* 注意修改后需要彻底杀掉idea后台,重启idea即可生效

国内AI育种近期动态

近期,可以看到,AI育种入局者越来越多,产品、报告、论文、会议、新闻也越来越多,这是好事,大家一起把蛋糕做大。 (点击标题链接,查看详情) 华智生物联合多家单位启动生物育种大模型计划 7月5日,在2024世界人工智能大会暨人工智能全球治理高级别会议期间,中信农业旗下华…

Java基础07:基本运算符

运算符 运算符operator Java 语言支持如下运算符:算术运算符: +,-,*,/,%,++,-- 赋值运算符 = 关系运算符: >,<,>=,<=,==,!= instanceof 逻辑运算符: &&,||,! 位运算符: &,|,^,~ , >>,<<,>>> (了解!!!) 条…

测试发布

本文来米联客(milianke),作者:米联客(milianke),转载请注明原文链接:https://www.cnblogs.com/milianke/p/18328481

Windows安装MinIO

官方文档 1. 安装 MinIO 服务器 从以下 URL 下载 MinIO 可执行文件: https://dl.min.io/server/minio/release/windows-amd64/minio.exe下一步包括运行可执行文件的说明。不能从资源管理器或双击文件来运行可执行文件 2. 启动minio server 在 PowerShell 或命令提示符中,导航…