nuxt3项目创建

安装

npx nuxi@latest init <project-name>

此时会出现报错,需要在host文件中加入

185.199.108.133 raw.githubusercontent.com

再次执行命令,进入安装

此处选择npm,出现下图表示安装成功

启动项目 

执行npm run dev,访问http://localhost:3000/出现下入界面

删除app.vue页面内容,页面底部会出现一个按钮

找到nuxt.config.ts文件,将属性设为false即可

 语法介绍

1、配置layouts

新建Header和Footer组件,新建layouts文件夹,新建global.vue,内容如下:

使用布局

新建pages文件夹,新建about页面

效果:可以实现菜单切换

2、添加element-plus

npm install element-plus

npm install @element-plus/nuxt

nuxt.config.ts文件中添加两行代码

3、添加scss,使用变量

npm install sass

新建assets文件夹,新建styles文件夹,新建common.scss文件,加入变量

nuxt.config.ts文件中添加几行代码,即可使用

4、动态tdk、SEO

页面中添加useSeoMeta

const num = Math.random()
useSeoMeta({
  title: '首页'+num,
  ogTitle: '我的神奇网站',
  description: '这是我的神奇网站,让我来告诉你关于它的一切。',
  ogDescription: '这是我的神奇网站,让我来告诉你关于它的一切。',
  ogImage: 'https://example.com/image.png',
  twitterCard: 'summary_large_image',
})

5、添加请求axios

 npm install axios

新建api文件夹,新建request.js文件,其余用法与vue一样,无需配置代理

import axios from 'axios'
import { ElMessage } from "element-plus"
const request = axios.create({
    baseURL:'http://192.168.0.102:48080',//本地使用
})
request.interceptors.request.use(
    config => {
        const token = 'Bearer c4322eded85c4c2a80b56095fdf1b6ac'
        //登录后获取token
        if(token){
            config.headers.authorization = `${token}`
        }
        return config
    },
    err => {
        return Promise.reject(err)
    }
)
request.interceptors.response.use(
    response => {
        if (response.data.code !== 0) {
            return Promise.reject(response.data)
        } else {
            return response.data
        }
    },
    error => {
        // console.log('error:', error)
        if(error.response){
            ElMessage({
                message: '请求错误!请求服务器无响应!',
                type: 'error',
                duration: 2000 //提示持续2秒
            })
        }
        return Promise.reject(error.response)
    }
)
export default request

6、路由

默认根据页面层级结构决定path

嵌套路由

比如user文件夹包含list.vue,该页面路由就是/user/list

使用definePageMeta修改页面路由

//定义页面路由
definePageMeta({
  path:'/user-list'
})

 修改后,访问/user/list则为404

动态路由

pages目录下新建user文件夹,新建[id].vue

// [id].vue
<template>
  <div>动态路由</div>
</template>
<script setup lang="ts">
  const route = useRoute()
  console.log(route.params.id)
</script>
<style scoped>

</style>

 访问路径http://localhost:3000/user/1,输入值为1

7、路由中间件

页面中添加下面代码

definePageMeta({
    // middleware(to, from) {
    //   console.log('匿名中间件,只在当前页面使用',to,from);
    // },
    middleware: ['router']
})

 新建文件夹middleware,新建router.js

//router.js
export default defineNuxtRouteMiddleware((to, from) => {
    console.log(to,from)
})

即可获取路由相关信息 

重新命名router.js为router.global.js,即为全局中间件,页面中无需引入即可执行

可以用于权限判断,路由重定向

export default defineNuxtRouteMiddleware((to, from) => {
    console.log(to,from)
    if(to.path==='/'){
        return navigateTo('/login')
    }
})

return abortNavigation(); // 停止导航 

 8、错误页面处理

根目录下新建error.vue

//error.vue
<template>
  <div>
    <h1>发生错误</h1>
    <p>抱歉,页面无法加载。</p>
    <p>错误代码:{{ error.statusCode }}</p>
  </div>
</template>

<script>
export default {
  props: ['error'],
}
</script>

展示效果

其余待完善。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值