Nuxt 菜鸟入门学习笔记六:路由

news2024/11/19 17:51:18

文章目录

  • 路由 Routing
    • 页面 Pages
    • 导航 Navigation
    • 路由参数 Route Parameters
    • 路由中间件 Route Middleware
    • 路由验证 Route Validation

Nuxt
Nuxt 官网地址: https://nuxt.com/

路由 Routing

Nuxt 的一个核心功能是文件系统路由器。pages/目录下的每个 Vue 文件都会创建一个相应的 URL(或路由)来显示该文件的内容。通过为每个页面使用动态导入,Nuxt 利用代码拆分为所请求的路由提供最少的 JavaScript。

页面 Pages

Nuxt 路由基于vue-router,并根据pages/目录下创建的每个组件的文件名生成路由。
该文件系统路由使用命名约定来创建动态和嵌套路由:

// 示例目录结构

pages/
--| about.vue
--| index.vue
--| posts/
----| [id].vue

上面的目录结构,Nuxt 会生成如下的路由表:

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

index.vue 和 about.vue 的代码之前文章已提供,此处补上 posts/[id].vue 文件的内容:

// pages/posts/[id].vue

<template>
  <div>
    <h1>@ posts page</h1>
  </div>
</template>

<style lang="scss" scoped></style>

导航 Navigation

<NuxtLink>组件在页面之间建立链接。它渲染了一个<a>标签,其 href 属性被设置为页面的路径。一旦应用程序水合,页面转换将通过更新浏览器 URL 在 JavaScript 中执行。这可以防止全页面刷新,并允许动画过渡。
当进入客户端视口时,Nuxt 将自动提前预取组件和链接页面的有效载荷(生成的页面),从而加快导航速度。

下面的代码示例,是在默认布局文件中:

// layouts/default.vue

<template>
  <header>
    <nav>
      <ul>
        <li><NuxtLink to="/">Home</NuxtLink></li>
        <li><NuxtLink to="/dashboard">Dashboard</NuxtLink></li>
        <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>

此时可以点击页面顶部的导航切换页面了。

路由参数 Route Parameters

<script setup>块或 Vue 组件的setup()方法,通过组合函数useRoute()以访问当前路由的详细信息。

正好,可以在 pages/posts/[id].vue 文件中来实践一下:

// pages/posts/[id].vue

<template>
  <div>
    <h1>@ posts page #id {{ route.params.id }}</h1>
  </div>
</template>

<script setup>
const route = useRoute();
</script>

<style lang="scss" scoped></style>

此时,点击页面顶部的导航链接就可以看到效果了。

路由中间件 Route Middleware

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

路由中间件运行于 Nuxt 应用程序的 Vue 部分。尽管名称相似,但它们与服务器中间件完全不同,后者运行于应用程序的 Nitro 服务器部分。

路由中间件有三种:

  • 匿名(或内联)路由中间件(Anonymous route middleware):直接定义在使用路由中间件的页面中。
  • 命名路由中间件(Named route middleware):放置在middleware/目录中,当在页面中使用时将通过异步导入自动加载。(注意:路由中间件的名称被规范化为kebab-case 横线命名法,因此someMiddleware变成了some-middleware。)
  • 全局路由中间件(Global route middleware):放置在middleware/目录下(且带有.global的后缀),每次路由变更时都会自动运行。

示例auth中间件保护/dashboard页面

  • 首先,创建中间件文件
// middleware/auth.ts

export default defineNuxtRouteMiddleware((to, from) => {
  console.log("@", to, from);
  if (isAuthenticated() === false) {
    return navigateTo("/login");
  }
});

export const isAuthenticated = (): boolean => {
  //TODO: 此处定义验证用户身份的代码逻辑
  return false;
};
  • 然后,创建 login 页面
// pages/login.vue

<template>
  <div>
    <h1>@ login page</h1>
  </div>
</template>

<script setup></script>

<style lang="scss" scoped></style>
  • 最后,创建 dashboard 页面,并使用中间件
// pages/dashboard.vue

<template>
  <div>
    <h1>@ dashboard page</h1>
  </div>
</template>

<script setup>
definePageMeta({
  middleware: "auth",
});
</script>

<style lang="scss" scoped></style>

此时访问 dashboard 页面,会跳转到登录页面。

路由验证 Route Validation

Nuxt 通过definePageMeta中的validate属性在你想要验证的每个页面中提供路由验证。
validate属性接受route作为参数。

  • 你可以返回一个布尔值,来确定这是否是一个有效的路由,并与此页面一起呈现。如果返回 false,并且找不到其他匹配的路由,则会导致 404 错误。
  • 也可以直接返回一个带有statusCode/statusMessage的对象,以立即响应错误(其他匹配将不会被检查)。

如果用例比较复杂,可以使用匿名路由中间件。

// pages/posts/[id].vue

<template>
  <div>
    <h1>@ posts page #id {{ postId }}</h1>
  </div>
</template>

<script setup>
definePageMeta({
  validate: async (route) => {
    // 检查ID是否由数字组成
    return /^\d+$/.test(route.params.id);
  },
});
const route = useRoute();
const postId = ref(0);
if (route) postId.value = route.params.id;
</script>

<style lang="scss" scoped></style>

此时访问路由 posts/1 页面正常显示,但访问 posts/abc 则会跳转到 404 页面。

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

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

相关文章

【ACL2023】Event Extraction as Question Generation and Answering

论文题目&#xff1a;Event Extraction as Question Generation and Answering 论文来源&#xff1a;ACL2023 论文链接&#xff1a;Event Extraction as Question Generation and Answering - ACL Anthology 代码链接&#xff1a;GitHub - dataminr-ai/Event-Extraction-as-…

PowerDsigner 数据库逆向pdm数模 常见数据库连接问题

本文章记录本人在使用powerdsigner工具&#xff0c;反向工程生成项目数据库表结构以及表关系的过程中遇到的两个常见问题。 问题1&#xff1a;Could not Initialize JavaVM 问题2&#xff1a;Non SQL Error : Could not load class oracle.jdbc.OracleDriver 环境&#xff1…

枚举enum

使用enum关键字定义提供枚举类的对象&#xff0c;多个对象用逗号分开&#xff0c;结尾用分号结束提供构造方法&#xff0c;给属性赋值使用public statiac final来修饰是属性提供get方法提供toString方法 public enum Season {SPRING("春天", "春暖花开"),…

都用HTTPS了,还能被查出浏览记录?

最近&#xff0c;群里一个刚入职的小伙因为用公司电脑访问奇怪的网站&#xff0c;被约谈了。他很困惑 —— 访问的都是HTTPS的网站&#xff0c;公司咋知道他访问了啥&#xff1f; 实际上&#xff0c;由于网络通信有很多层&#xff0c;即使加密通信&#xff0c;仍有很多途径暴露…

达梦数据库使用杂记

1、DM管理工具打开后一片白 这是因为上一次把对象导航窗口手动关闭了&#xff0c;后面再重新打开时默认就不显示了&#xff1b; 只需要到窗口-视图-对象导航 打开即可 2、 查询语句需要带表空间名&#xff0c;如&#xff1a;select * from "表空间名"."表名&…

混合IT基础设施的安全挑战与缓解策略

自从“身份是新的边界”这句格言问世以来&#xff0c;公司已经开始扩展他们的能力和运营&#xff0c;超越了基于本地、办公室基础设施的范围。采用云原生技术意味着组织正在寻求扩大传统工作流程&#xff0c;而无需投入时间和资源来建立物理数据中心和其他硬件基础设施。 身份…

2023版 STM32实战4 滴答定时器精准延时

SysTick简介与特性 -1- SysTick属于系统时钟。 -2- SysTick定时器被捆绑在NVIC中。 -3- SysTick可以产生中断,且中断不可屏蔽。 SysTick的时钟源查看 通过时钟树可以看出滴答的时钟最大为72MHZ/89MHZ 通过中文参考手册也可以得到这个结论 代码编写&#xff08;已经验证&a…

苹果曾考虑基于定位控制AirPods Pro自适应音频

在一次最近的采访中&#xff0c;苹果公司的高管Ron Huang和Eric Treski透露&#xff0c;他们在开发AirPods Pro自适应音频功能时&#xff0c;曾考虑使用GPS信号来控制音频级别。这个有趣的细节打破了我们对AirPods Pro的固有认知&#xff0c;让我们对苹果的创新思维有了更深的…

十三,打印辐照度图

上节HDR环境贴图进行卷积后&#xff0c;得到的就是辐照度图&#xff0c;表示的是周围环境间接漫反射光的积分。 现在也进行下打印&#xff0c;和前面打印HDR环境贴图一样&#xff0c;只是由于辐照度图做了平均&#xff0c;失去了大量高频部分&#xff0c;因此&#xff0c;可以…

unity 限制 相机移动 区域(无需碰撞检测)

限制功能原著地址&#xff1a;unity限制相机可移动区域&#xff08;box collider&#xff09;_unity限制相机移动区域_manson-liao的博客-CSDN博客 一、创建限制区域 创建一个Cube&#xff0c;Scale大小1&#xff0c;添加组件&#xff1a;BoxCollder&#xff0c;调整BoxColld…

花式打印0~100中3的倍数

列表解析3的倍数负步长切片倒序&#xff0c;iter、zip函数配合实现分行格式打印。 (本笔记适合熟悉python列表解析式的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程…

【开发篇】九、SpringBoot整合ES(ElasticSearch)

文章目录 1、整合2、简单示例3、一点补充4、增删改查索引与文档 1、整合 整合思路都一样&#xff0c;先起步依赖或普通依赖&#xff0c;再配置&#xff0c;再封装的操作对象。先引入依赖&#xff1a; <dependency> <groupId>org.springframework.boot</grou…

电子签章软件怎么安装?选本地私有还是SaaS云?

出于高效便捷、安全防伪&#xff0c;以及跟上数字化转型趋势的考虑&#xff0c;越来越多的企业开始考虑使用电子签章软件。 但是每当企业考虑购买电子签章软件时&#xff0c;往往都会面对本地私有部署和SaaS公有云两种不同的电子签章软件安装部署方式&#xff0c;而不知道到底应…

使用c++实现输出爱心(软件:visual Studio)

#include <iostream> using namespace std;int main() {//爱心曲线方程(x^2y^2-a)^3-x^2*y30double a 0.5;//定义绘图边界double bound 1.3 * sqrt(a);//x,y坐标变化步长double step 0.05;//二维扫描所有点,外层逐层扫描for (double y bound; y > -bound; y - ste…

DeepSpeed4Science:利用先进的AI系统优化技术实现科学发现

本文转载自微软 DeepSpeed 团队官方知乎账号&#xff1a;zhihu.com/people/deepspeed&#xff0c;由微软 DeepSpeed 团队翻译自官方英文博客&#xff1a;Announcing the DeepSpeed4Science Initiative: Enabling large-scale scientific discovery through sophisticated AI sy…

机器学习,深度学习

一 、Numpy 1.1 安装numpy 2.2 Numpy操作数组 jupyter扩展插件&#xff08;用于显示目录&#xff09; 1、pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple 2、pip install jupyter_nbextensions_configurator -i https://pypi.tuna.t…

26069-2022 硅单晶退火片 思维导图

声明 本文是学习GB-T 26069-2022 硅单晶退火片. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了硅单晶退火片(以下简称退火片)的分类、技术要求、试验方法、检验规则、包装、标志、 运输、贮存、随行文件及订货单内容。 本文件…

如何去开展软件测试工作

1. 软件测试 在一般的项目中&#xff0c;一开始均为手动测试&#xff0c;由于自动化测试前期投入较大&#xff0c;一般要软件项目达到一定的规模&#xff0c;更新频次和质量均有一定要求时才会上自动化测试或软件测试。 1.1. 项目中每个成员的测试职责 软件测试从来不是某一…

windows server 远程桌面服务配置和授权解决方法

适用&#xff1a;win server 2016以上 win server默认的连接数是两个用户。 1.添加远程桌面授权服务 第一步&#xff1a;服务器管理 - 添加角色和功能打开添加角色和功能向导窗口&#xff0c;选择基于角色或给予功能安装 第二步&#xff1a;添加远程桌面会话主机和远程桌面授…

Serlet API详解

目录 一、HttpServlet 1.1 处理doGet请求 1.2 处理doPost请求 二、HttpServletRequest 2.1 核心方法 三、HttpServletRespons 3.1 核心方法 一、HttpServlet 在编写Servlet代码的时候&#xff0c;首先第一步要做的就是继承HttpServlet类&#xff0c;并重写其中的某些方法 核心…