我使用的是16.14.0
至此,一个nuxt3项目已经被创建完成了,接下来就是在这个框架的基础上充实我们的内容。
nuxt3约定式路由,不需要配置路由,在根目录pages下创建业务页面即可访问。
访问 http://localhost:3000/about 展示about页面内容
访问 http://localhost:3000 展示index页面内容
组件替换成
this is index page,Index pages has a components named hello
Hello nuxt3
Nuxt routing is based on vue-router and generates the routes from every component created in the pages/ directory, based on their filename.
nuxt路由基于vue-router,并根据pages/目录中创建的每个组件的文件名生成路由。
This file system routing uses naming conventions to create dynamic and nested routes:
这个文件系统路由使用命名约定来创建动态和嵌套路由:
这是 {{ id }} 号用户的详情
页面中的跳转,可以通过组件NuxtLink(无需引入)进行跳转,to跳转路径
-
用户1详情
-
用户2详情
-
关于
在script setup中,我们可以通过useRoute方式获取当前页面的route信息,如query信息、params信息
例如:当我们访问 http://localhost:3000/detail/1?name=%E5%93%88%E5%B0%94%E6%BB%A8%E5%A4%A7%E7%8C%A9%E7%8C%A9
页面信息时
detail页面获取路由相关信息并在页面上进行展示:
这是 {{ id }} 号用户的详情
名为 {{ name }}
nuxt提供了一个可定制的路由中间件框架,您可以在整个应用程序中使用它,非常适合在导航到特定路由之前提取想要运行的代码。
有三种类型的路由中间件:
使用示例:
// 匿名 defineNuxtRouteMiddleware定义nuxt route 中间件
export default defineNuxtRouteMiddleware((to, from) => {
console.log(to, from, '中间件跳转过程中to和from所代表的含义有何不同')
if(!Number(to.params.id)) {
return navigateTo('/login')
} else if(Number(to.params.id) === 3) {
return abortNavigation()
}
})
definePageMeta({
middleware: ['auth'],
// middleware: 'auth',
})
账号:
密码:
navigateTo (to: RouteLocationRaw | undefined | null, options?: { replace: boolean, redirectCode: number, external: boolean) 可以根据对应options,重定向到指定路由,也可以直接调用来完成页面的跳转。
abortNavigation (err?: string | Error) 直接终止跳转,并可以返回一些错误信息
全局路由中间件无需刻意引入,只要在定义中间件的文件上加入global,即可在全局使用。
// 匿名 defineNuxtRouteMiddleware定义nuxt route 中间件
export default defineNuxtRouteMiddleware((to, from) => {
if(to.fullPath.includes('detail') && !Number(to.params.id)) {
return navigateTo('/login')
} else if(Number(to.params.id) === 3) {
return abortNavigation('Insufficient permissions.')
} else {
return true
}
})
addRouteMiddleware
通过addRouteMiddleware()
方法可以在代码中动态添加全局和命名路由中间件,例如可以在插件中
export default defineNuxtPlugin(() => {
addRouteMiddleware('global-test', () => {
console.log('this global middleware was added in a plugin and will be run on every route change')
}, { global: true })
addRouteMiddleware('named-test', () => {
console.log('this named middleware was added in a plugin and would override any existing middleware of the same name')
})
})
export default defineNuxtPlugin(() => {
addRouteMiddleware((to, from) => {
if (to.path === '/forbidden') {
return false
}
})
})
export default defineNuxtPlugin(() => {
addRouteMiddleware('named-middleware', () => {
console.log('named middleware added in Nuxt plugin')
})
})
export default defineNuxtPlugin(() => {
addRouteMiddleware('global-middleware', (to, from) => {
console.log('global middleware that runs on every route change')
},
{ global: true }
)
})
在您希望验证的每个页面中,通过definePageMeta中的validate属性提供路由验证。
validate属性接受路由作为参数。您可以返回一个布尔值,以确定这是否是要与该页一起呈现的有效路由。如果您返回false,并且找不到另一个匹配项,这将导致404错误。你也可以直接返回一个带有statusCode/statusMessage的对象,以立即响应一个错误(其他匹配将不被检查)。
以上模拟业务场景为,详情员工的cid一定要为数字,其他情况下展示404
nuxt使用两个文件夹取处理像样式表、字体或图片资源
/+public+图片
/+图片
~+public+图片
/+assets+图片
~+assets+图片
上述示例可见,
public文件可用方式: /public下的路径
、 /public/public下的路径
、~/public/public下的路径
assets文件可用方式:/assets/assets下的路径
、~/assets/assets下的路径
相同点:
不同点:
注意:
要在nuxt组件样式中全局插入语句,可以在nuxt.config文件中使用Vite选项。
npm install --save-dev sass node-sass sass-loader
npm install less [email protected] --save-dev
$primary: green;
$secondary: #E4A79D;
.cursor-pointer {
cursor: pointer;
}
div {
background-color: #E4A79D;
}
span {
color: $primary;
}
* {
box-sizing: border-box;
-webkit-tap-highlight-color: transparent;
-webkit-text-size-adjust: none;
padding: 0;
margin: 0;
}
html,
body {
margin: 0px;
padding: 0px;
height: 100%;
width: 100%;
box-sizing: border-box;
color: #333;
-webkit-text-size-adjust: 100% !important;
-moz-text-size-adjust: 100% !important;
text-size-adjust: 100% !important;
}
a {
text-decoration: none;
}
input {
border: none; //去除边框
outline: none; //可以去除点击input时的border
}
@keyframes scaleBig {
from {
transform: scale(1);
}
to {
transform: scale(1.05);
}
}
有两种配置方式
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: true },
css: [
'@/assets/css/global.scss'
]
})
此时全局样式已被导入,直接在页面中即可使用
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
devtools: { enabled: true },
vite: {
css: {
preprocessorOptions: {
scss: {
additionalData: '@use "@/assets/css/global.scss" as *;'
}
}
}
}
})
此时,页面对应的style标签中,必须使用lang="scss"
全局样式才会生效
总结用法,希望可以帮助到你,
我是Ably,你无须超越谁,只要超越昨天的自己就好~
1、官方文档
2、中间件参考文章
3、资源参考文章
4、基础配置参考文章
5、Vite全局样式参考使用