Nuxt3目录结构(二)
前言
书接上回
- nuxt约定的目录结构如下👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15├── app.vue # Nuxt 3 应用程序中的主组件 入口组件
├── components # 组件目录,支持自动导入
├── layouts # 布局目录
├── composables # 公共函数,支持自动导入
├── assets # 静态资源目录 与vue项目的assets相同
├── middleware # 路由中间件
├── nuxt.config.ts # Nuxt 配置文件,可以理解成vue.config.js 文件名必须是nuxt.config 后缀名可以是.js,.ts或.mjs
├── package.json
├── pages # 基于文件的路由
├── plugins #插件
├── public # 不会参与打包,与vue项目的public类似直接挂在服务器的根目录
├── README.md
├── server
├── tsconfig.json
└── yarn.lock
layout布局目录
Nuxt
提供了一个可定制的布局框架layout
,您可以在整个应用程序中使用,非常适合将常见的 UI
或代码模式提取到可重用的布局组件中,可以把layout
想象成嵌套路由最外层的父级,内部需要使用插槽。
layout
目录下的布局文件,必须要有一个根元素进行包裹,并且根元素不能是<slot />
- 举个例子
1
2
3-| layouts/
---| default.vue
-| app.vue1
2
3
4
5
6
7<!--default.vue-->
<template>
<div>
我是布局模板,default.vue
<slot />
</div>
</template>1
2
3<NuxtLayout name="default">
内容
</NuxtLayout>
- 具名插槽接收
1
2
3-| layouts/
---| default.vue
-| app.vue1
2
3
4
5
6
7<template>
<div>
我是布局模板,default.vue
<slot name="one" />
<slot name="two" />
</div>
</template>1
2
3
4
5
6
7
8
9
10
11
12<template>
<div>
<NuxtLayout name="default">
<template #two> 我是two中的内容 </template>
<template #one>
<div class="">
我是one中的内容
</div>
</template>
</NuxtLayout>
</div>
</template>
layout
与pages
可以指定页面使用layout
布局也可以所有页面均使用layout
1
2
3
4
5-| layouts/
---| default.vue
-| pages/
---| index.vue
-| app.vue1
2
3
4
5
6
7<!--default.vue-->
<template>
<div>
我是布局模板,default.vue
<slot />
</div>
</template>1
2
3
4
5
6
7<!--index.vue-->
<template>
<div>
我是布局模板,default.vue
<slot />
</div>
</template>1
2
3
4<!-- app.vue-->
<NuxtLayout name="default">
<NuxtPage></NuxtPage>
</NuxtLayout>如果在
NuxtLayout
中不定义name
可以在pages中增加<script setup> definePageMeta({ layout: "default", }) </script>
针对指定页面采用layout
布局
middleware
1 |
|
middleware
路由中间件可以理解成vue路由的拦截器,当页面跳转某个页面的之前执行的函数,如果路由中间件的后缀名以.global结尾则是全局的路由守卫不需要在每个页面都引用。
1 |
|
1 |
|
1 |
|
上述代码,当页面跳转到
/router
的时候会执行对应的中间件函数。
Plugins 目录
Nuxt
将自动读取plugins
目录中的文件并加载它们。您可以在文件名中使用.server
或.client
后缀以仅在服务器或客户端加载插件,例如使用elementui需要在该目录下注册。
- 引用
ElementPlus
1
2plugins
| - myPlugin.ts1
yarn add element-plus
1
2
3
4
5//myPlugin.ts
import ElementPlus from 'element-plus'
export default defineNuxtPlugin(nuxtApp => {
nuxtApp.vueApp.use(ElementPlus)
})这样在全局就可以使用1
2
3
4<!-- app.vue -->
<style>
@import 'element-plus/dist/index.css';
</style>element-ui
了server目录
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!谢谢