【Nuxt3】项目pages目录的用法介绍

简言

记录下nux3pages目录文件的使用方法。

pages

pages目录是存放项目页面文件的地方,Nuxt 3提供基于文件的路由功能,可在网络应用程序中创建路由。
pages/ 目录中的每个页面文件都代表不同的路由,显示其内容。

建议将其他的业务组件vue文件存放到其他目录,pages只存放路由相关的页面vue文件。

文件路由规则

页面是 Vue 组件,可以使用 Nuxt 支持的任何有效扩展名(默认为 .vue、.js、.jsx、.mjs、.ts 或 .tsx)。

自动导入

Nuxt 会自动为 ~/pages/ 目录中的每个页面创建路由。
例如:

<template><div><!-- This page correctly has only one single root element -->Page content</div>
</template>
// https://vuejs.org/guide/extras/render-function.html
export default defineComponent({render () {return h('h1', 'Index page')}
})

nuxt会生成两个路由。

如果你的pages/下的文件返回的不是vue组件实例,也会生成一个文件同名路由,这个路由可以访问,默认显示 NuxtLayout 设置的layout布局文件内容。

子路由

可以使用 <NuxtPage> 显示嵌套路由。
pages/index.vue 文件将映射到应用程序的 / 路由。
如果使用 app.vue,请确保使用 <NuxtPage/> 组件来显示当前页面:

<template><div><!-- Markup shared across all pages, ex: NavBar --><NuxtPage /></div>
</template>

嵌套子路由显示也和app.vue的相似。
例如,创建parent.vue文件,再创建同名parent目录,那么parent目录下文件生成的路由就是parent的子路由 /parent/*

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

显示子路由child.vue 组件,必须在 pages/parent.vue 中插入 <NuxtPage> 组件:

<template><div><h1>I am the parent view</h1><NuxtPage :foobar="123" /></div>
</template>

NuxtPage组件有个page-key属性可以设置当前显示子路由值

动态路由

如果在方括号内放置任何内容,都会变成动态路由参数。您可以在文件名或目录中混合和匹配多个参数,甚至是非动态文本。
例如:

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

路由可以匹配/users-*/*,例如:users-admin/123。
在上面的示例中,您可以通过 $route 对象访问组件中的参数:

<template><p>{{ $route.params.group }} - {{ $route.params.id }}</p>
</template>

全路由

如果需要一个总括路由,可以使用一个名为 […slug].vue 的文件来创建。这将匹配该路径下的所有路由。

<template><p>{{ $route.params.slug }}</p>
</template>

导航到 /hello/world 会出现这样的结果:

<p>["hello", "world"]</p>

可以当作404路由

路由元数据

有的时候我们想往路由上定义元数据。可以在页面内使用 definePageMeta 宏来实现这一目的,该宏在 <script> 和 <script setup> 中均有效。

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

这些数据可以在应用程序的其他部分通过 route.meta 对象访问。

<script setup lang="ts">
const route = useRoute()console.log(route.meta.title) // My home page
</script>

特殊元数据

你可以自己定义自己的元数据,但使用 definePageMeta 定义的某些元数据有其特殊用途:

  • alias — 路由别名。您可以定义页面别名。它们允许你从不同的路径访问同一个页面。页面别名可以是字符串,也可以是字符串数组,如 vue-router 文档中所定义。
  • keepalive — 如果您在 definePageMeta 中设置 keepalive: true,Nuxt 将自动用 Vue <KeepAlive> 组件包装您的页面。
  • key — 页面路由key值。
  • layout — 您可以定义用于渲染路由的布局。可以是 false(禁用任何布局)、字符串或 ref/computed(如果你想以某种方式使其具有反应性)。
  • layoutTransition and pageTransition — 布局过渡效果和页面过渡效果。
  • middleware — 页面路由中间件。您可以定义中间件,以便在加载此页面前应用。它将与任何匹配的父/子路由中使用的所有其他中间件合并。它可以是一个字符串、一个函数(遵循 global before guard 模式的匿名/内联中间件函数)或一个字符串/函数数组。
  • name — 页面路由name.
  • path — 路由path。如果您有比文件名更复杂的模式,可以定义路径匹配器。

类型声明

如果要为页面添加自定义元数据,您可能希望以类型安全的方式进行。我们可以增强 definePageMeta 所接受对象的类型:
在index.d.ts声明文件添加

declare module '#app' {interface PageMeta {pageType?: string}
}// It is always important to ensure you import/export something when augmenting a type
export {}

路由跳转

vue页面模板上:
使用<NuxtLink> 组件,NuxtLink官网描述。

<template><NuxtLink to="/">Home page</NuxtLink>
</template>

在js或ts上:
Nuxt 3 允许通过 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>

客户端专用页面

您可以通过给页面添加 .client.vue 后缀,将其定义为客户端页面。该页面的所有内容都不会在服务器上呈现。

服务器专用页面

您只需给页面添加 .server.vue 后缀,就能将其定义为服务器页面。虽然您可以使用 vue-router 控制的客户端导航功能导航到该页面,但该页面将自动使用服务器组件渲染,这意味着渲染页面所需的代码不会出现在您的客户端捆绑包(client-side bundle)中。

自定义路由

随着应用程序变得越来越大、越来越复杂,您的路由可能需要更大的灵活性。因此,Nuxt 直接公开了路由器、路由和路由器选项,以便以不同方式进行定制。

示例

在根目录创建app目录,再app,目录下创建router.options.ts扩展或覆盖路由。
/app/router.options.ts

import type { RouterConfig } from '@nuxt/schema';
export default <RouterConfig>{routes(_routes) {return [..._routes,{name: "A",path: '/a',component: () => import('~/components/a.vue'),},]},
}

若不想覆盖,记得把_routes返回。

多个页面目录

默认情况下,所有页面都应放在项目根目录下的一个页面目录中。
不过,您可以使用 Nuxt Layers 对应用程序的页面进行分组:

-| some-app/
---| nuxt.config.ts
---| pages
-----| app-page.vue
-| nuxt.config.ts
// some-app/nuxt.config.ts
export default defineNuxtConfig({
})
export default defineNuxtConfig({extends: ['./some-app'],
})

extends的用法感觉有点像monorepo策略

结语

结束了。

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

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

相关文章

首个ChatGPT机器人- Figure 01;李开复旗下零一万物推出Yi系列AI大模型API

&#x1f989; AI新闻 &#x1f680; 首个ChatGPT机器人- Figure 01 摘要&#xff1a;Figure 01是一个由初创公司Figure联合OpenAI开发的人形机器人。它展示了与人类和环境互动的能力&#xff0c;可以说话、看东西&#xff0c;并且可以执行各种任务&#xff0c;如递食物、捡垃…

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…

【微信小程序】原生组件的分层渲染 和 同层渲染

微信小程序的原生组件指的是&#xff0c;微信小程序语法中自带的 video 等标签。【这里的原生指的是微信小程序而不是 js】 微信小程序的页面是基于 webview 的&#xff0c;其他的原生组件是独立于 webview 的。 分层渲染就是&#xff0c;小程序原生组件是独立于 webview 的。…

登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧

概述 在进行网络数据抓取时&#xff0c;有些数据需要用户处于登录状态才能获取。这时就需要使用Cookie和Session来维持登录态。Cookie是服务器发给浏览器的小数据片段&#xff0c;存储在用户计算机中&#xff0c;用于在用户请求时辨识用户身份。Session则是存储在服务器端的用…

算法的基本概念和复杂度

目录 一. 算法的基本概念1.1 什么是算法1.2 算法的五个特性1.3 怎么才算好的算法 二. 算法的时间复杂度三. 算法的空间复杂度 \quad 一. 算法的基本概念 \quad \quad 1.1 什么是算法 算法可以用自然语言来描述, 也可以用伪代码和代码来描述 \quad 1.2 算法的五个特性 有穷性, 一…

【C#动态加载数据】“防界面卡死”

废话不多说&#xff0c;直接开始 添加引用 using System.ComponentModel 完整代码 using System; using System.ComponentModel; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; // 引入SqlClient命名空间以使用ADO.NET public part…

Flink 流处理框架核心性能

Apache Flink 是一款先进的开源分布式数据处理框架&#xff0c;其核心特性体现了对大规模数据处理的高度适应性和灵活性&#xff0c;尤其在实时流处理领域展现出了卓越的技术优势&#xff1a; 1 高性能实时处理 Flink 引擎设计注重高吞吐量与低延迟的完美结合&#xff0c;可轻…

ASP.NET-Server.HtmlEncode

目录 背景: 1.转义特殊字符&#xff1a; 2.防止跨站脚本攻击&#xff08;XSS&#xff09;&#xff1a; 3.确保输出安全性&#xff1a; 4.保留原始文本形式&#xff1a; 5.与用户输入交互安全&#xff1a; 实例说明: 不用Server.HtmlEncode 效果展示: 用Server.HtmlEnc…

SpringMVC重点记录

目录 1.学习重点2.回顾MVC3.回顾servlet4.初始SpringMVC4.1.为什么要学SpringMVC?4.2.SpringMVC的中重点DispatcherServlet4.3.SpringMVC项目的搭建4.4.MVC框架要做哪些事情?4.5.可能会遇到的问题 5.SpringMVC的执行原理6.使用注解开发SpringMVC7.Controller控制总结8.RestF…

VSCode ARM CortexM 开发

VSCode ARM CortexM 开发: http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_开发/ 文章目录 VSCode ARM CortexM 开发: <http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_%E5%BC%80%E5%…

低代码与数智制造:引领软件开发的革新之旅

在当今快速发展的数字化时代&#xff0c;软件开发已经渗透到各行各业&#xff0c;成为推动社会进步的重要力量。随着技术的不断进步&#xff0c;低代码开发与数智制造正逐渐崭露头角&#xff0c;成为引领软件开发领域革新的两大关键要素。本文将深入探讨低代码与数智制造的内涵…

鸿蒙实战开发:【分布式软总线组件】

简介 现实中多设备间通信方式多种多样(WIFI、蓝牙等)&#xff0c;不同的通信方式使用差异大&#xff0c;导致通信问题多&#xff1b;同时还面临设备间通信链路的融合共享和冲突无法处理等挑战。分布式软总线实现近场设备间统一的分布式通信管理能力&#xff0c;提供不区分链路…

音频占用磁盘空间太多 需要把mp3音频转aac音频缩小占用空间 应该怎么操作?

一&#xff1a;什么是aac格式&#xff1f; aac是一种音频压缩格式&#xff0c;它是MPEG-2标准下的一种音频压缩方式&#xff0c;也可以作为HE-AAC&#xff0c;AAC或AAC-LC格式使用&#xff0c;是音频压缩领域中的一种重要格式。与MP3的比较&#xff0c;aac在保证音质的同时可以…

K8S CNI

OCI概念 OCI&#xff0c;Open Container Initiative&#xff0c;开放容器标准&#xff0c;是一个轻量级&#xff0c;开放的治理结构&#xff08;项目&#xff09;&#xff0c;在 Linux 基金会的支持下成立&#xff0c;致力于围绕容器格式和运行时创建开放的行业标准。 OCI 项目…

零基础入门多媒体音频(2)-音频焦点

说明&#xff1a;非全职写手&#xff0c;整个系列内容的顺序可能不是循序渐进&#xff0c;后期考虑调整。目前优先编写熟练度高以及最近工作中用到的的技术。 在音频领域的开发中&#xff0c;音频焦点是个很重要的概念。在面试中也是个高频话题。通过音频焦点的引入&#xff0…

stm32-定时器输入捕获

目录 一、输入捕获简介 二、输入捕获框图 1.定时器总框图 2.输入捕获框图 3.主从触发模式 三、固件库实现 1.定时器测量PWM频率 2.PWMI模式 一、输入捕获简介 二、输入捕获框图 1.定时器总框图 上图可知&#xff0c;四个输入捕获和输出比较共用4个CCR寄存器&#x…

Android SystemServer进程解析

SystemServer进程在android系统中占了举足轻重的地位&#xff0c;系统的所有服务和SystemUI都是由它启动。 一、SystemServer进程主函数流程 1、主函数三部曲 //frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zy…

element ui el-select组件添加选项下拉加载

需求描述&#xff1a;在做搜索的时候由于有一个下拉列表接口返回数据特别多所以对列表进行了一个下拉触底加载的事件&#xff0c;但是官方文档是没有对应的api的所以自己使用指令写了一个方法。 实现代码&#xff1a; <el-selectv-model"sellerNameSearchVal"v-s…

维修SedoTreepoint染色机电脑Sedomat 1800+ 5500触摸屏控制器

染厂控制器 染厂机械触摸屏控制器 Sedomat 1808 Sedomat 1808 提供 7 英​​寸用户友好型触摸屏显示屏&#xff0c;防水等级为 IP67。它保证了恶劣环境下的高质量和可靠性。RFID阅读器提供了数据采集的可能性。内部I/O可配置以满足纱线、织物和其他类型染整机的要求。 除了这些…

代码之外的功夫:程序员精进之路 -- 阅读笔记及总结

第一章 设计原型 Ross自己也不是很明确自己的需求。——好家伙&#xff0c;太真实了。客户不能明确清晰地传递自己的需求&#xff0c;客户可能只有一个大概的目标。这时候&#xff0c;该怎么办&#xff1f; 这时候可以和客户沟通&#xff0c;先出一个草图&#xff08;线框图&…