当前位置: 首页 > news >正文

【学习总结|DAY036】Vue工程化+ElementPlus

引言

在前端开发领域,Vue 作为一款流行的 JavaScript 框架,结合 ElementPlus 组件库,为开发者提供了强大的构建用户界面的能力。本文将结合学习内容,详细介绍 Vue 工程化开发流程以及 ElementPlus 的使用,助力开发者快速上手并应用到实际项目中,且会包含丰富的代码案例以便更好地理解和实践。

一、Vue 基础与工程化

(一)Vue 框架概述

Vue 是一款用于构建用户界面的渐进式 JavaScript 框架,它不仅是一个框架,还拥有丰富的生态。其核心功能包括声明式渲染、组件系统、客户端路由(VueRouter)、状态管理(Pinia、Vuex)等,官方网站为开发者提供了全面的文档支持(https://cn.vuejs.org/) 。

(二)Vue 工程化概念

前端工程化旨在企业级项目开发中,将前端开发所需的工具、技术、流程和经验进行规范化、标准化,涵盖模块化、组件化、规范化和自动化等方面。Vue 工程化则是基于 Vue 框架实现这些特性,提升开发效率、代码复用性和可维护性。

(三)Vue 工程化环境搭建与项目创建

  1. 环境准备:使用 Vue 官方提供的脚手架工具 create-vue,需要先安装 NodeJS(一个免费、开源、跨平台的 JavaScript 运行时环境),并通过其软件包管理器 npm 进行后续操作。
  2. 创建项目:执行npm create vue@3.3.4命令,根据提示设置项目名称、是否添加 TypeScript、JSX 支持、Vue Router、Pinia、测试工具(Vitest、Cypress)以及 ESLint 代码质量检查等功能。例如,创建一个名为my - vue - project的项目,不添加 TypeScript、JSX 支持,添加 Vue Router 和 Pinia:
C:\Users\YourUsername\Desktop>npm create vue@3.3.4
npx create - vue
Vue.js - The Progressive JavaScript Framework
Project name:...my - vue - project
Add TypeScript?... No
Add JSX Support? ...No
Add Vue Router for Single Page Application development?...Yes
Add Pinia for state management?... Yes
Add Vitest for Unit Testing?...No
Add Cypress for both Unit and End - to - End testing?... No
Add ESLint for code quality?...No
Scaffolding project in C:\Users\YourUsername\Desktop\my - vue - project...
Done. Now run:
cd my - vue - project
npm install
npm run dev

  1. 安装依赖与启动项目:进入项目目录,执行npm install安装项目依赖,再通过npm run dev启动项目,在浏览器中访问http://localhost:5173即可查看项目。

(四)Vue 项目开发流程与结构

  1. 项目结构剖析:Vue 项目包含.vscode(开发工具配置)、node_modules(第三方包)、public(静态资源)、src(源代码)等目录。其中,src目录下的main.js是入口文件,负责创建 Vue 应用实例;App.vue是根组件,.vue文件为单文件组件,将组件的逻辑(JS)、模板(HTML)和样式(CSS)封装在一起。
  2. 开发流程梳理:开发过程中,在单文件组件中编写代码。例如,在App.vue中,<script setup>部分定义数据和方法,<template>部分生成 HTML 结构,<style scoped>部分定义组件的 CSS 样式。以下是一个简单的App.vue示例:
<template><div><h1>{{ message }}</h1><button @click="increment">点击计数: {{ count }}</button></div>
</template><script setup>
import { ref } from 'vue';const message = ref('欢迎来到Vue项目');
const count = ref(0);const increment = () => {count.value++;
};
</script><style scoped>
h1 {color: blue;
}
</style>

(五)Vue API 风格

Vue 组件有选项式 API 和组合式 API 两种风格。

  1. 选项式 API:通过包含datamethodsmounted等选项的对象描述组件逻辑,这些选项定义的属性可通过this指向当前组件实例访问。示例代码如下:
<template><button @click="increment">count:{{ count }}</button>
</template><script>
export default {data() {return {count: 0};},methods: {increment() {this.count++;}},mounted() {console.log('Vue mounted...');}
};
</script>

  1. 组合式 API:Vue3 引入的基于函数的组件编写方式,使用ref()创建响应式变量,onMounted()注册组件挂载后的回调函数,setup标识开启组合式 API 的简洁使用方式,且在组合式 API 中thisundefined。示例代码如下:
<template><button @click="increment">count:{{ count }}</button>
</template><script setup>
import { ref, onMounted } from 'vue';const count = ref(0);const increment = () => {count.value++;
};onMounted(() => {console.log('Vue Mounted...');
});
</script>

二、ElementPlus 组件库

(一)ElementPlus 简介

ElementPlus 是饿了么团队基于 Vue 3 研发的组件库,提供了丰富的组件,如按钮、表单、表格等,官网为https://element-plus.org/zh-CN/#/zh-CN 。

(二)ElementPlus 快速入门

  1. 安装与引入:在项目目录下执行npm install element-plus@2.4.4 --save安装组件库,在main.js中引入 ElementPlus 及其样式:
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import App from './App.vue';const app = createApp(App);
app.use(ElementPlus).mount('#app');

  1. 组件使用:访问 ElementPlus 官方文档,复制所需组件代码并根据项目需求调整。例如,使用按钮组件:
<template><el - button type="primary">主要按钮</el - button><el - button type="success">成功按钮</el - button>
</template><script setup>
// 无需额外导入,直接使用ElementPlus组件
</script>

(三)ElementPlus 常见组件

  1. 表格组件:用于展示多条结构类似的数据,使用时需明确绑定的数据data和每列展示的属性信息。以下是一个结合异步数据获取的表格示例:
<template><el - table :data="tableData" style="width: 100%"><el - table - column prop="date" label="日期" width="180"></el - table - column><el - table - column prop="name" label="姓名" width="180"></el - table - column><el - table - column prop="address" label="地址"></el - table - column></el - table>
</template><script setup>
import { ref, onMounted } from 'vue';
import axios from 'axios';const tableData = ref([]);const fetchData = async () => {try {const response = await axios.get('https://example.com/api/data');tableData.value = response.data;} catch (error) {console.error('数据获取失败:', error);}
};onMounted(() => {fetchData();
});
</script>

  1. 分页条组件:当数据量过多时进行分页操作,可配置属性和事件,如需使用中文,可引入中文语言包进行配置。示例代码如下:
<template><div><el - pagination:total="total":page - size="pageSize":current - page="currentPage"@current - change="handleCurrentChange"layout="prev, pager, next"></el - pagination></div>
</template><script setup>
import { ref } from 'vue';
import zhCn from 'element-plus/dist/locale/zh-cn.mjs';
import { createApp } from 'vue';
import ElementPlus from 'element-plus';
import App from './App.vue';const app = createApp(App);
app.use(ElementPlus, { locale: zhCn }).mount('#app');const total = ref(400);
const pageSize = ref(10);
const currentPage = ref(1);const handleCurrentChange = (page) => {currentPage.value = page;// 在此处可根据当前页码重新请求数据
};
</script>

  1. 对话框组件:在保留页面状态下告知用户并承载相关操作,通过model-value/v-model绑定的布尔值控制显示与隐藏。示例代码如下:
<template><div><el - button @click="dialogVisible = true">打开对话框</el - button><el - dialog v - model="dialogVisible" title="提示"><p>这是一个对话框内容</p><template #footer><el - button @click="dialogVisible = false">关闭</el - button></template></el - dialog></div>
</template><script setup>
import { ref } from 'vue';const dialogVisible = ref(false);
</script>

  1. 表单组件:包含输入框、单选框等多种输入组件,用于收集、验证和提交数据,关键在于表单项布局、数据采集(v-model绑定)和数据提交(事件绑定)。示例代码如下:
<template><el - form ref="formRef" :model="formData" label - width="80px"><el - form - item label="活动名称"><el - input v - model="formData.activityName"></el - input></el - form - item><el - form - item label="活动区域"><el - select v - model="formData.activityZone"><el - option label="区域一" value="zone1"></el - option><el - option label="区域二" value="zone2"></el - option></el - select></el - form - item><el - form - item><el - button type="primary" @click="submitForm">提交</el - button><el - button @click="resetForm">重置</el - button></el - form - item></el - form>
</template><script setup>
import { ref } from 'vue';const formRef = ref();
const formData = ref({activityName: '',activityZone: ''
});const submitForm = () => {formRef.value.validate((valid) => {if (valid) {console.log('表单提交成功', formData.value);} else {console.log('表单验证失败');}});
};const resetForm = () => {formRef.value.resetFields();
};
</script>

三、实战案例

(一)Vue 项目中数据渲染案例

在 Vue 项目中基于组合式 API 完成用户列表数据渲染。首先安装axios依赖用于发起异步请求,在组件中引入相关函数和axios,定义响应式变量和请求方法,在onMounted钩子函数中触发请求获取数据并渲染。示例代码如下:

<template><table border="1" cellspacing="0" width="60%"><thead><tr><th>编号</th><th>姓名</th><th>年龄</th><th>性别</th><th>成绩</th><th>等级</th></tr></thead><tbody><tr v - for="(user, index) in userList" :key="index"><td>{{ index + 1 }}</td><td>{{ user.name }}</td><td>{{ user.age }}</td><td><span v - if="user.gender === 1">男</span><span v - if="user.gender === 2">女</span></td><td>{{ user.score }}</td><td><span v - if="user.score >= 85">优秀</span><span v - else - if="user.score >= 60">及格</span><span style="color: red;" v - else>不及格</span></td></tr></tbody></table>
</template><script setup>
import { ref, onMounted } from 'vue';
import axios from 'axios';const userList = ref([]);const fetchUsers = async () => {try {const response = await axios.get('https://web-server.itheima.net/emps/list');userList.value = response.data.data;} catch (error) {console.error('用户数据获取失败:', error);}
};onMounted(() => {fetchUsers();
});
</script>

(二)ElementPlus 综合案例

利用 ElementPlus 制作包含查询、表单、表格等元素的页面,并异步获取数据展示。结合 ElementPlus 组件的使用方法,通过配置和代码编写实现页面功能。示例代码如下:

<template><div><el - form :model="queryForm" label - width="80px" class="query - form"><el - form - item label="姓名"><el - input v - model="queryForm.name"></el - input></el - form - item><el - form - item label="性别"><el - select v - model="queryForm.gender"><el - option label="全部" value=""></el - option><el - option label="男" value="1"></el - option><el - option label="女" value="2"></el - option></el - select></el - form - item><el - form - item><el - button type="primary" @click="searchUsers">查询</el - button><el - button @click="resetQuery">清空</el - button></el - form - item></el - form><el - table :data="userList" style="width: 100%"><el - table - column prop="name" label="姓名" width="180"></el - table - column><el - table - column prop="gender" label="性别" width="80"><template #default="scope"><span v - if="scope.row.gender === 1">男</span><span v - if="scope.row.gender === 2">女</span></template></el - table - column><el - table - column prop="job" label="职位" width="180"></el - table - column><el - table - column prop="hireDate" label="入职日期" width="180"></el - table - column><el - table - column prop="updateDate" label="更新时间" width="180"></el - table - column></el - table></div>
</template><script setup>
import { ref, onMounted } from 'vue';
import axios from 'axios';const queryForm = ref({name: '',gender: ''
});
const userList = ref([]);const searchUsers = async () => {try {const response = await axios.get(`https://web-server.itheima.net/emps/list?name=${queryForm.value.name}&gender=${queryForm.value.gender}`);userList.value = response.data.data;} catch (error) {console.error('用户数据查询失败:', error);}
};const resetQuery = () => {queryForm.value.name = '';queryForm.value.gender = '';searchUsers();
};onMounted(() => {searchUsers();
});
</script><style scoped>
.query - form {margin - bottom: 20px;
}
</style>

四、总结

Vue 工程化开发与 ElementPlus 组件库的结合,为前端开发者提供了高效的开发方式。通过规范化的项目结构、灵活的 API 风格以及丰富的组件库,开发者能够快速构建出功能强大、用户体验良好的前端应用。在实际开发中,不断深入学习和实践,将这些技术运用到更多项目中,提升自己的前端开发能力。

相关文章:

【学习总结|DAY036】Vue工程化+ElementPlus

引言 在前端开发领域&#xff0c;Vue 作为一款流行的 JavaScript 框架&#xff0c;结合 ElementPlus 组件库&#xff0c;为开发者提供了强大的构建用户界面的能力。本文将结合学习内容&#xff0c;详细介绍 Vue 工程化开发流程以及 ElementPlus 的使用&#xff0c;助力开发者快…...

【GitHub】GitHub 2FA 双因素认证 ( 使用 Microsoft Authenticator 应用进行二次验证 )

文章目录 一、GitHub 的 2FA 双因素认证二、使用 Microsoft Authenticator 应用进行二次验证1、TOTP 应用2、下载 Microsoft Authenticator 应用3、安装使用 Authenticator 应用 三、恢复码重要性 一、GitHub 的 2FA 双因素认证 现在登录 GitHub 需要进行二次身份验证 ; 先登录…...

c# 2025/2/7 周五

13.《表达式&#xff0c;语句详解1》 18未完。。 表达式&#xff0c;语句详解_1_哔哩哔哩_bilibili...

蓝桥杯思维训练(五)

文章目录 子集II1191.K次串联后最大子数组之和 子集II 子集II 思路分析&#xff1a; 求解子集的问题的关键就是&#xff0c;通过递归与回溯&#xff0c;我们就是得确定以某个元素开始的子集&#xff0c;对于这个题目来说&#xff0c;比较麻烦的一点就是&#xff0c;存在重复的…...

I.MX6ULL 中断介绍下

GIC重点寄存器 1.中断分发器寄存器&#xff08;Distributor register &#xff09; a.Distributor Control Register(中断分发控制寄存器), GICD_CTLR Purpose Enables the forwarding of pending interrupts from the Distributor to the CPU interfaces 使能将挂起的中断从…...

Elasticsearch 生产集群部署终极方案

Elasticsearch 集群部署 1.集群部署1.1 新增用户1.2 优化操作系统1.3 JDK1.4 elasticsearch1.5 开机自启动 2.安全认证功能2.1 生成CA证书2.2 生成密钥2.3 上传至其他节点2.4 修改属主、属组2.5 配置文件添加参数2.6 各节点添加密钥库密码2.7 设置用户密码 1.集群部署 1.1 新增…...

Python用langchain、OpenAI大语言模型LLM情感分析苹果股票新闻数据及提示工程优化应用...

全文链接&#xff1a;https://tecdat.cn/?p39614 本文主要探讨了如何利用大语言模型&#xff08;LLMs&#xff09;进行股票分析。通过使用提供的股票市场和金融新闻获取数据&#xff0c;结合Python中的相关库&#xff0c;如Pandas、langchain等&#xff0c;实现对股票新闻的情…...

【正点原子K210连载】第六十七章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第六十七章 音频FFT实验 本章将介绍CanMV下FFT的应用&#xff0c;通过将时域采集到的音频数据通过FFT为频域。通过本章的学习&#xff0c;读者将学习到CanMV下控制FFT加速器进行FFT的使用。 本章分为如下几个小节&#xff1a; 32.1 maix.FFT模块介绍 32.2 硬件设计 32.3 程序设…...

Centos Ollama + Deepseek-r1+Chatbox运行环境搭建

Centos Ollama Deepseek-r1Chatbox运行环境搭建 内容介绍下载ollama在Ollama运行DeepSeek-r1模型使用chatbox连接ollama api 内容介绍 你好&#xff01; 这篇文章简单讲述一下如何在linux环境搭建 Ollama Deepseek-r1。并在本地安装的Chatbox中进行远程调用 下载ollama 登…...

ReactNative进阶(五十九):存量 react-native 项目适配 HarmonyOS NEXT

文章目录 一、前言二、ohos_react_native2.1 Fabric2.2 TurboModule2.2.1 ArkTSTurboModule2.2.2 cxxTurboModule&#xff1a; 三、拓展阅读 一、前言 2024年10月22日19:00&#xff0c;华为在深圳举办“原生鸿蒙之夜暨华为全场景新品发布会”&#xff0c;主题为“星河璀璨&…...

go并发和并行

进程和线程 进程&#xff08;Process&#xff09;就是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;每一个进程都有一个自己的地址空间。…...

一种解决SoC总线功能验证完备性的技术

1. 前言 通过总线将各个IP通过总线连接起来的SoC芯片是未来的大趋势&#xff0c;也是缩短芯片开发周期&#xff0c;抢先进入市场的常用方法。如何确保各个IP是否正确连接到总线上&#xff0c;而且各IP的地址空间分配是否正确&#xff0c;是一件很棘手的事情。本文提出了一种新…...

Web3 与区块链:开启透明、安全的网络新时代

在这个信息爆炸的时代&#xff0c;我们对网络的透明性、安全性和隐私保护的需求日益增长。Web3&#xff0c;作为新一代互联网的代表&#xff0c;正携手区块链技术&#xff0c;引领我们走向一个更加透明、安全和去中心化的网络世界。本文将深入探讨 Web3 的基本概念、区块链技术…...

c#中Thread.Join()方法的经典示例

在 C# 中&#xff0c;Thread.Join 是一个非常有用的方法&#xff0c;它可以让主线程&#xff08;调用线程&#xff09;等待子线程&#xff08;被调用线程&#xff09;执行完毕后再继续执行。 1、经典示例1 using System; using System.Threading;public class Example {stati…...

深入了解越权漏洞:概念、危害与防范

前言 越权漏洞作为一种常见且极具威胁的安全隐患&#xff0c;就像隐藏在暗处的 “黑客帮凶”&#xff0c;时刻威胁着我们的数据安全和隐私。就让我们一起揭开越权漏洞的神秘面纱&#xff0c;深入了解它的来龙去脉、危害以及应对之策。 一、什么是越权漏洞 想象一下&#xff0…...

MySQL 数据库编程-C++

目录 1 数据库基本知识 1.1 MYSQL常见命令 1.2 SQL注入 1.3 ORM框架 1 数据库基本知识 MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成&#xff1a…...

dl学习笔记(9):pytorch数据处理的完整流程

1&#xff09;自动导入常用库的设置方式 在开始之前&#xff0c;这里介绍一下自动导入常用的你需要加载的库的操作方式。 首先在我们的目录下找到ipython文件&#xff0c;如下图&#xff1a; 然后找到里面的startup文件&#xff1a; 然后新建一个文本文档&#xff0c;输入你每…...

wps中的vba开发

推荐先学习vba语言&#xff08;兰色幻想80集&#xff09; 保存代码时注意保存为 .xlsm(启用宏的工作簿) 子程序SUN和函数FUNCTION&#xff1a; Sub 第一个程序()MsgBox "这是第一个程序"End Sub 注释Sub 第二个程序()Dim str As Stringstr "这是第二个程序&…...

力扣 LCR 078 合并K个升序链表

思路 解题过程 分治合并 与 LeetCode 21题 合并两个有序链表 相似 只是在此题的基础上增加了链表的数量。 使用递归将链表数组不断分成两半&#xff0c;直到分成的小组都只剩下一个链表元素为止&#xff0c;随后开始合并链表。 复杂度 时间复杂度: O(N * logK) K 为 链表(li…...

【hive】记一次hiveserver内存溢出排查,线程池未正确关闭导致

一、使用 MemoryAnalyzer软件打开hprof文件 很大有30G&#xff0c;win内存24GB&#xff0c;不用担心可以打开&#xff0c;ma软件能够生成索引文件&#xff0c;逐块分析内存&#xff0c;如下图。 大约需要4小时。 overview中开不到具体信息。 二、使用Leak Suspects功能继续…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…...

java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟

众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了&#xff0c;延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp &#xff0c;边缘服务器拉流推送到云服务器 …...