浅析Vue3 实战笔记(一)

本文是结合实践中和学习技术文章总结出来的笔记(个人使用),如有雷同纯属正常((✿◠‿◠))

喜欢的话点个赞,谢谢! 有问题欢迎指正!!

前面已经讲了基本的Vue生命周期和入门知识,本篇开始使用Vite构建一个demo

1. 创建项目

1.1. 初始化项目

使用Vite初始化项目

yarn create vite my-vue-vite 

初始化之后会得到一个这样的目录

现在已经是一个完整的项目了,,可以启动,但是我们这里还需要先配置一下Eslint方便后续写代码的校验

1.2. 配置eslint

安装Eslint

yarn add eslint -D

本来是打算用Eslint@9来做配置,由于eslint@9版本实在是配置太麻烦 这里我建议安装指定版本:(丢入package.json文件 yarn 安装即可)

  "eslint": "^8.57.0","eslint-config-standard": "^17.1.0","eslint-plugin-import": "^2.29.1","eslint-plugin-n": "^16.6.2","eslint-plugin-promise": "^6.1.1","eslint-plugin-vue": "^9.24.1","typescript-eslint": "^7.6.0",

根目录下新增一个.eslintrc.cjs文件: 这是我个人的一些简单配置

module.exports = {env: {browser: true,es2021: true},extends: ['plugin:vue/vue3-strongly-recommended','standard'],parserOptions: {ecmaVersion: 12,parser: '@typescript-eslint/parser',sourceType: 'module'},plugins: ['vue','@typescript-eslint'],rules: {'vue/multi-word-component-names': 'off',indent: ['error', 4] // 设置为4个空格},ignorePatterns: ['node_modules/','dist/','.commitlintrc.js']
}

配置完成以后需要在Vscode设置一下才能自动保持格式化,如下图所示:

首选项=>设置=>搜索Eslint=>Eslint › Format: Enable 设置打钩

这样我们ctrl +s 保存的时候就会自动按照Eslint自动格式化代码了

2. 项目目录结构设计

本文将按照以下目录结构进行开发,后续章节的webpack配置也是基于此目录结构。
请先按照以下内容将目录搭建好,方便后续操作

├─ /public              <--静态目录
|  ├─ /images           <--图片目录
|  |  └─ logo.png       <--菜单logo
|  ├─ favicon.ico       <--项目图标
├─ /src                 <--开发目录
|  ├─ /api              <--API公用目录
|  |  └─ index.ts   
|  ├─ /components        <--公用组件目录
|  ├─ /store            <--Pinia状态管理目录
|  |  ├─ /models        <--Pinia models目录
|  |  ├─ index.ts       <--Pinia Stroe
|  ├─ /router           <--路由目录
|  |  ├─ index.ts       <--路由配置文件
|  ├─ /views            <--页面目录
|  |  ├─ /Home          <--Home目录
|  |  ├─ ├─index.vue    <--Home页面代码
|  ├─ App.vue           <--App文件
|  ├─ main.ts           <--主入口
|  ├─ vite-env.d.ts    
├─ .gitignore 
├─ .eslintrc.cjs        <--eslint配置文件
├─ index.html           <--主入口html文件
├─ README.md            <--项目说明
├─ tsconfig.json        <--ts配置文件
├─ vite.config.ts       <--vite配置文件
└─ package.json         <--依赖配置文件

这种目录结构设计,将页面、请求api、状态管理、路由分别建立独立的目录,并且设置了components等公用目录,方便多人协作开发及后续维护。

3. 配置vite.config.ts

vite.config.ts文件与我们平常配置webpack文件长得差不多,根据官方文档按需配置即可

3.1. 设置别名

在我们开发项目的时候为了方便写引入路径和防止路径太长写错,我们都会设置@别名来代替无穷尽../../这种写法

安装@types/node模块 否则引入path会提示找不到模块

yarn add @types/node --save-dev

修改vite.config.ts文件:

export default defineConfig({.....resolve: {alias: {'@': path.resolve(__dirname, 'src')}},
})

配置tsconfig.json文件:

 "compilerOptions": {.......//src路径"baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录"paths": { //路径映射,相对于baseUrl"@/*": ["src/*"] },}
3.2. 配置代理

开发项目跨域请求通常是不能直接请求的,需要进行跨域设置,在模块化开发中通常都是使用代理来解决跨域的问题

修改vite.config.ts文件: 这里我的本地服务器是4000端口所以我配置了localhost:4000,大家可以自行更改

export default defineConfig({......server: {// 代理域名proxy: {'/api': {target: 'http://localhost:4000',rewrite: (path) => path.replace(/^\/api/, '')}}}
})

4. 开始开发

打开App.vue删除不需要的代码

<script setup lang="ts">
</script>
<template><div>App</div>
</template>
<style scoped></style>

4.1. 配置路由

安装vue-router

yarn add vue-router@4

修改router/index.ts

import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({history: createWebHashHistory(), // 路由模式routes: [{path: '/home',name: 'home',component: () => import('../views/Home/index.vue')},{path: '/test',name: 'test',component: () => import('../views/Test/index.vue')}]
})
export default router

在main.ts中注册:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'createApp(App).use(router).mount('#app')

App.vue中使用:

<script setup lang="ts">
</script>
<template><!-- 路由页面入口 --><router-view />
</template>
<style scoped></style>

页面显示效果:

4.2. 引入Ant Design Vue 2.X

安装

yarn add ant-design-vue@next

在main.ts注册Antd

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
import 'ant-design-vue/dist/reset.css'createApp(App).use(router).mount('#app')

在Home页面中引入button组件

views/Home/index.vue

<script setup lang='ts'>
import { Button } from 'ant-design-vue'
</script>
<template><div>Home</div><Button type="primary">button按钮</Button>
</template>
<style lang='less' scoped>
</style>

4.3. 布局样式

这里的布局UI我们采用ant-design-vue的layout组件(可点击跳转官网查阅)

新建layout目录:src/layout/index.vue

<script lang="ts" setup>
import { ref } from 'vue'
import logo from '../../public/images/logo.svg'
import { MenuListType } from '@/types/Home'
const collapsed = ref<boolean>(false)
const MenusList = ref<MenuListType[]>([{name: '首页',path: '#/',children: [],icon: 'HomeOutlined',id: '1'},{name: '测试页面',path: '#/test',children: [],icon: 'WindowsOutlined',id: '2'}])
const selectedKeys = ref(['1'])
</script>
<template><a-layout style="min-height: 100vh"><a-layout-siderv-model:collapsed="collapsed"collapsible><div class="logo"><imgclass="logoimg":src="logo"alt="">Vite Demo</div><a-menutheme="dark"v-model:selectedKeys="selectedKeys"mode="inline"><a-menu-itemv-for="item in MenusList":key="item.id"><component :is="item?.icon" /><aclass="menus_text":href="item.path">{{ item.name }}</a></a-menu-item></a-menu></a-layout-sider><a-layout><a-layout-header style="background: #fff; padding: 0" /><a-layout-content style="margin: 0 16px"><a-breadcrumb style="margin: 16px 0"><a-breadcrumb-item>User</a-breadcrumb-item><a-breadcrumb-item>Bill</a-breadcrumb-item></a-breadcrumb><div :style="{ padding: '24px', background: '#fff', minHeight: '360px' }"><router-view /></div></a-layout-content><a-layout-footer style="text-align: center">Ant Design ©2018 Created by Ant UED</a-layout-footer></a-layout></a-layout>
</template><style>
.logo {height: 32px;margin: 16px;font-size: 20px !important;line-height: 32px;/* background: rgba(255, 255, 255, 0.3); */color: #fff;.logoimg {width: 30px;height: 30px;}
}
.menus_text {margin-left: 10px;
}</style>

显示效果如图,此时我们发现菜单上的icon没有显示,我们还需要去main.ts中引入

修改main.ts文件

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index'
import Antd from 'ant-design-vue'
import 'ant-design-vue/dist/reset.css'
import * as antdIcons from '@ant-design/icons-vue'// 创建对象
const app = createApp(App)
// 将atn-desing Iocn全部添加进来
Object.keys(antdIcons).forEach((key: any) => {app.component(key, antdIcons[key as keyof typeof antdIcons])
})
app.config.globalProperties.$antdIcons = antdIconsapp.use(router).use(Antd).mount('#app')

展示效果如图,图标已经出来了:

总结:本篇初步的项目初始化部署就已经搭建完成了,下一篇我们将引入antd的组件表单配合echats做一个首页,欢迎查阅下一篇浅析Vue3 实战笔记(二),本篇就到这里.谢谢

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

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

相关文章

若依RuoYi-Vue分离版—免登录直接访问

若依RuoYi-Vue分离版—免登录直接访问 如何不登录直接访问前端&#xff1a;后端:方法1&#xff1a;在SecurityConfig.java中设置httpSecurity配置匿名访问方法2&#xff1a;在对应的方法或类上面使用Anonymous注解。 如何不登录直接访问 官网有说明&#xff1a;如何不登录直接…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)

概览 在上篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)博文中,我们讨论了 Swift 语言中序列和集合元素排序的一些基本知识,我们还给出了以自定义类型中任意属性排序的“康庄大道”。 不过在实际的撸码场景中,我们往往需要的是“多属性”同时参与到排序的考…

279. 完全平方数

解法一、回溯法&#xff1a; class Solution {public int numSquares(int n) {return numSquaresHepler(n);}public int numSquaresHepler(int n){if(n 0) return 0;int count Integer.MAX_VALUE;for(int i 1; i * i < n; i){count Math.min(count,numSquaresHepler(n …

elementPlus 图标不显示 属性模式不显示

问题&#xff1a; elementPlus 属性模式图标不显示 <el-input placeholder"请输入用户名" :suffix-icon"Avatar"> //这个图标不显示 之前在main.ts里全局引入了icons-vue。这里的script里也没引入。 解决&#xff1a; 在当前的script中重新引入a…

【Linux】进程_1

文章目录 五、进程1. 冯---诺依曼体系结构2. 操作系统 未完待续 五、进程 1. 冯—诺依曼体系结构 我们常见的计算机和不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 冯—诺依曼体系结构由&#xff1a;输入设备、输出设备和中央处理器&#xff…

【C++】——继承(详解)

一 继承的定义和概念 1.1 继承的定义 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类&#xff0c;被继承的称为基类…

CentOS7下快速升级至OpenSSH9.7p2安全版本

一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包 1、编译打包的shell脚本来源于该项目 https://github.com/boypt/openssh-rpms解压zip项目包 unzip openssh-rpms-main.zip -d /opt cd /opt/openssh-rpms-main/ vim pullsrc.sh 修改第23行为source ./version.env 2、sh pull…

C语言,struct 结构体、union共用体的使用

//状态字节&#xff0c;根据数据定义几个标志&#xff0c;标志位依据联合体内部结构体进行变量定义 //目的&#xff0c;节省内存空间&#xff0c;省去特定字节 struct STATDATA {union{unsigned char stat;struct {unsigned stat0:1;unsigned stat1:1;unsigned stat2:1;unsign…

[线程与网络] Java虚拟机常考面试题(线程与网络完结)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

Atlassian企业日技术分享:AI在ITSM中的创新实践与应用、Jira服务管理平台AI功能介绍

2024年5月17日&#xff0c;Atlassian中国合作伙伴企业日活动在上海成功举办。活动以“AI协同 创未来——如何利用人工智能提升团队协作&#xff0c;加速产品交付”为主题&#xff0c;深入探讨了AI技术在团队协作与产品交付中的创新应用与实践&#xff0c;吸引了众多业内专家、企…

光伏项目管理——数字化改革

随着全球对可再生能源的迫切需求以及环保意识的日益增强&#xff0c;光伏产业作为清洁能源的重要组成部分&#xff0c;正迎来快速发展的黄金时期。然而&#xff0c;传统的光伏项目管理方式已逐渐无法满足现代化、高效化的需求&#xff0c;数字化改革成为了行业发展的必然趋势。…

DeepSORT(目标跟踪算法)中卡尔曼滤波器中的更新

DeepSORT&#xff08;目标跟踪算法&#xff09;中卡尔曼滤波器中的更新 flyfish 说协方差先说期望 在协方差的定义中&#xff0c;符号 E \mathbb{E} E 表示期望值&#xff08;Expectation&#xff09;。期望值是随机变量的平均值或均值&#xff0c;表示在大量试验中随机变量…

什么是 URL 过滤?是如何保障浏览体验的?

互联网是一个无边无际的空间&#xff0c;几乎包含了你能想象到的一切。不幸的是&#xff0c;这意味着也存在着从不合适到非常危险的网站。这就是 URL 过滤可以发挥作用的地方。 一、URL 过滤的含义 我们希望您已经熟悉 URL&#xff08;统一资源定位器&#xff09;&#xff0c;…

Java MyBatis实战:QueryWrapper中的and和or拼接技巧

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、引言 在Java Web开发中&#xff0c;MyBatis是一个非常流行的持久层框架。它通过XML或注解的方式将Java对象与数据库表进行映射&#xff0c;从而实现数据的增删改查操作。在使用MyBatis的过程中&#xff0c;经常…

进程和内存管理

描述&#xff1a; 内存的使用和剩余情况当前cpu的负载情况找进程的id结束某个进程 检查内存&#xff1a; 方法一&#xff1a; /proc/meminfo 文件这是一个伪文件这个文件&#xff0c;纪录了内存的相关信息不用用vi打开&#xff0c;应该用cat查看 方法二&#xff1a; 命令…

Qt程序打包成单个exe文件

文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有&#xff1a; windeployqt &#xff1a;安装Qt时自带Enigma Virtual Box 下…

重温共射放大电路

1、放大概念 小功率信号变成一个大功率信号&#xff0c;需要一个核心器件做这件事&#xff0c;核心器件的能量由电源提供&#xff0c;通过核心器件用小功率的信号去控制大电源&#xff0c;来实现能量的转换和控制&#xff0c;前提是不能失真&#xff0c;可以用一系列正弦波进行…

SpringBoot之静态资源

默认静态资源路径 classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/ 静态资源路径下的文件&#xff0c;可以通过根目录访问 resources 文件夹的文件如下图所示&#xff1a; 启动项目&#xff0c;分别访问以下路径&#xff1a; ht…

解锁 DevOps 精通:成功的综合指南

在动态的软件开发领域&#xff0c;要掌握 DevOps&#xff0c;需要对其核心原则有细致的了解&#xff0c;并采取战略性实施方法。DevOps 是一种协作方法&#xff0c;它将软件开发 (Dev) 和 IT 运营 (Ops) 结合起来&#xff0c;以自动化和简化软件交付流程。它旨在缩短开发周期、…

CleanMyMac X软件最新版下载【安装详细图文教程】

​CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用&#xff0c;同时CleanMyMac X可以强力卸载恶意软件&#xff0c;修复系统漏洞&#xff0c;一键扫描和优化Mac系统…