您好,舰长!非常棒的选择。功能是应用的骨架,而美观的 UI 则是应用的灵魂和血肉。是时候为我们的飞船进行一次全面的“外观升级”和“内饰装修”了。

我们将集成一个在业界非常流行、功能强大的 Vue 3 组件库——Element Plus。它将帮助我们快速构建出专业、美观的用户界面,而无需手动编写大量的 CSS。


第十一站:【美化】集成 Element Plus UI 组件库

我们的目标:
用 Element Plus 提供的预设组件,替换掉我们应用中原生的 <input>, <button>, <checkbox> 等元素,让我们的待办事项应用焕然一新。


步骤 1:安装 Element Plus

我们需要安装两个包:element-plus 主库和它的官方图标库 @element-plus/icons-vue

在您的项目终端中,运行以下命令:

npm install element-plus @element-plus/icons-vue

步骤 2:在项目中全局引入

为了能在所有组件中方便地使用 Element Plus,我们需要在主入口文件 main.ts 中进行全局注册和样式引入。

  1. 打开 src/main.ts 文件。
  2. 导入 Element Plus 的主模块和 CSS 文件,并用 app.use() 来安装它。

用下面的代码完整替换 src/main.ts 的内容:

// src/main.tsimport { createApp } from 'vue'
import { createPinia } from 'pinia'// 1. 导入 Element Plus 主模块和样式文件
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'import App from './App.vue'
import router from './router'
import './assets/main.css'const app = createApp(App)// 2. 在使用其他插件之前,先使用 Element Plus
app.use(ElementPlus)
app.use(createPinia())
app.use(router)app.mount('#app')

提示: 这种全局引入的方式最简单直接,适合学习。在大型项目中,为了优化打包体积,开发者通常会使用“按需引入”,但这需要额外的配置。


步骤 3:重构组件,换上新“皮肤”

现在,最有趣的部分来了!我们将用 Element Plus 的组件来替换我们已有的 HTML 元素。

1. 重构 HomeView.vue (主页)

我们将把原生的表单元素换成 <el-input><el-button>

打开 src/views/HomeView.vue,用下面的代码完整替换它的 <template><script> 部分 (<style> 可以保持不变):

// src/views/HomeView.vue<script setup lang="ts">
import { ref } from 'vue'
import { Plus } from '@element-plus/icons-vue' // 导入一个图标
import TodoItem from '../components/TodoItem.vue'
import { useTodoStore } from '../stores/todoStore'const todoStore = useTodoStore()
const newTodoText = ref('')function addNewTodo() {todoStore.addTodo(newTodoText.value)newTodoText.value = ''
}
</script><template><main><h1>我的待办事项 (还剩 {{ todoStore.incompleteCount }} 项未完成)</h1><div class="add-form"><el-input v-model="newTodoText" placeholder="接下来要做什么?" size="large"clearable@keyup.enter="addNewTodo"/><el-button type="primary" size="large" :icon="Plus"@click="addNewTodo">添加</el-button></div><ul><TodoItem v-for="todo in todoStore.todos" :key="todo.id":todo="todo"@remove="todoStore.removeTodo(todo.id)"@toggle-complete="todoStore.toggleTodoComplete(todo.id)"/></ul></main>
</template><style scoped>
/* 我们可以为新表单添加一点样式 */
.add-form {display: flex;gap: 10px; /* 元素间的间距 */margin-bottom: 20px;
}main { /* ... 其他样式保持不变 ... */ }
ul { /* ... 其他样式保持不变 ... */ }
</style>

2. 重构 TodoItem.vue (待办事项)

我们将把 <li> 换成更好看的 <el-card>,把复选框和按钮也一并替换。

打开 src/components/TodoItem.vue,用下面的代码完整替换它的全部内容:

// src/components/TodoItem.vue<script setup lang="ts">
import { RouterLink } from 'vue-router'
// 导入需要的图标
import { Delete } from '@element-plus/icons-vue'defineProps<{todo: {id: number;text: string;completed: boolean;}
}>()const emit = defineEmits(['remove', 'toggle-complete'])
</script><template><el-card class="todo-item" :class="{ completed: todo.completed }"><div class="todo-content"><el-checkbox :model-value="todo.completed"@change="emit('toggle-complete')"size="large"/><RouterLink :to="`/todo/${todo.id}`" class="todo-text"><span>{{ todo.text }}</span></RouterLink></div><el-button type="danger" :icon="Delete" circle @click="emit('remove')"/></el-card>
</template><style scoped>
.todo-item {margin-bottom: 10px;
}/* 自定义卡片内部的样式 */
/* el-card 的样式可以通过 :deep() 选择器进行深度修改 */
:deep(.el-card__body) {display: flex;justify-content: space-between;align-items: center;
}.todo-content {display: flex;align-items: center;gap: 15px; /* 复选框和文字的间距 */
}.todo-text {text-decoration: none;color: inherit; /* 继承父元素颜色 */font-size: 1.1rem;
}.completed .todo-text {text-decoration: line-through;color: #a8a5a5;
}
</style>

查看焕然一新的应用

保存所有文件! 回到浏览器,您会发现:

  • 输入框和按钮变得更加现代和美观。
  • 每一个待办事项都成了一张精致的卡片。
  • 复选框和删除按钮也变成了 Element Plus 的样式,并且删除按钮上还有了图标。

您的应用不仅功能强大,现在看起来也相当专业了!您已经学会了如何将一个流行的第三方组件库无缝集成到您的项目中,这是现代前端开发的一项核心技能。

下一站预告:
我们的应用已经非常完整。现在,最适合学习的就是 Vue 3 中组织可复用逻辑的利器——组合式函数 (Composables)。它能让我们的代码库变得更加整洁、优雅和易于维护。

准备好后,我们就可以出发,学习如何打造我们自己的“逻辑工具箱”!

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

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

相关文章

【ubuntu24.04】忘了自己把开机samba挂载的脚本放哪里了

从两个方面来定位这几个 Samba 挂载点&#xff1a; 一、查看当前已经挂载的 CIFS/SMB 文件系统 使用 mount mount | grep -i cifs或者 mount | grep -E (smb|cifs)这会列出所有当前活跃的 CIFS/SMB 挂载&#xff0c;比如&#xff1a; //192.168.1.100/share on /mnt/data type …

在 Windows 上使用 Docker Desktop 快速搭建本地 Kubernetes 环境(附详细部署教程)

言简意赅的讲解Docker Desktop for Windows搭建Kubernetes解决的痛点 目标读者&#xff1a; 对 Docker Desktop 有一定了解&#xff0c;能在 Windows 上成功安装和使用 Docker Desktop。想要在本地快速搭建一套 Kubernetes 环境进行测试或学习的开发者。 一、准备工作 安装 Doc…

dockercompose快速安装ELK

第一步&#xff1a;环境准备 请确保您的机器上已经安装了 Docker 和 Docker Compose。 第二步&#xff1a;创建项目目录和配置文件 为了让 Docker Compose 能够正确地构建和管理容器&#xff0c;我们需要创建一个特定的目录结构。 创建一个主目录&#xff0c;例如 elk-stack。…

闲聊ARM内核参数传递机制

之前一直没怎么在意这个问题&#xff0c;直到最近搞了个奇奇怪怪的项目&#xff0c;才发现这部分知识得补上来&#xff0c;记录一下。 ARM有一个标准&#xff0c;叫《Procedure Call Standard for the Arm Architecture》&#xff0c;人话就是ARM架构过程调用标准&#xff0c;…

万兴喵影Filmora AI Video v14.7.03国际高级版,AI视频剪辑全能工具,一键专业级创作​

[软件名称]: 万兴喵影Filmora AI Video v14.7.03 [软件大小]: 199.4 MB [下载通道]: 夸克盘 | 迅雷盘 软件介绍 &#x1f3ac;《万兴喵影》v14.7.03国际高级版&#xff5c;AI智能剪辑神器&#xff0c;解锁全功能无水印&#xff01; ✨ 核心优势&#xff1a; ✅ 1000背景音…

暴力风扇方案介绍

炎炎夏日&#xff0c;当普通风扇只能送来 “温柔拂面”&#xff0c;暴力风扇却能吹出 “台风级” 清凉&#xff01;想知道这些 “风力狂魔” 是如何炼成的&#xff1f;答案藏在电机、电路和芯片的黄金三角组合里。​ 一、电机&#xff1a;暴力风扇的 “心脏起搏器”​ 暴力风扇…

pyqt小问题汇总

文章目录 1、inherit global site-packages2、setGeometry(10,20,30,40)setGeometry(x, y, width, height)1. **x参数**2. **y参数**3. **width参数**4. **height参数** 示例说明与其他方法的对比注意事项示例代码 1、inherit global site-packages 在pycharm 创建项目时&…

提升JavaScript性能的六大关键策略

1、优化代码结构与算法 避免使用嵌套循环&#xff0c;改用更高效的算法如哈希表或二分查找。减少不必要的计算&#xff0c;缓存重复使用的计算结果。使用时间复杂度更低的算法替代高复杂度操作。优化递归调用&#xff0c;避免栈溢出和性能瓶颈。改用迭代或尾递归优化。简化条件…

打造跨平台应用的全能框架:Dioxus

在如今飞速发展的数字世界中,越来越多的开发者开始寻找能够满足跨平台需求的高效框架。而在这些选择中,Dioxus这个全栈应用框架脱颖而出。Dioxus是一款为Web、桌面和移动端开发而设计的全栈框架,采用Rust语言,具备跨平台、一体化的优势。本文将深入介绍Dioxus的独特功能,应…

大事件项目记录5-用户接口开发-更新用户头像

5&#xff09;更新用户头像。 UserController.java&#xff1a; PatchMapping("updateAvatar")public Result updateAvatar(RequestParam String avatarUrl){userService.updateAvatar(avatarUrl);return Result.success();} UserService.java&#xff1a; UserServ…

Spring Cloud 微服务架构模型

下面是一个完整的 springcloud-eureka-demo 示例项目&#xff0c;包含&#xff1a; Eureka Server 注册中心 Eureka Client 服务提供者&#xff08;service-provider&#xff09; Eureka Client 服务消费者&#xff08;service-consumer&#xff09; &#x1f4c1; 项目结构…

计算机网络 网络层:控制平面

在本章中&#xff0c;包含网络层的控制平面组件。控制平面作为一种网络范围的逻辑&#xff0c;不仅控制沿着从源主机到目的主机的端到端路径间的路由器如何转发数据报&#xff0c;而且控制网络层组件和服务如何配置和管理。5.2节&#xff0c;传统的计算图中最低开销路径的路由选…

力扣第85题-最大矩形

力扣链接:85. 最大矩形 - 力扣&#xff08;LeetCode&#xff09; 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵&#xff0c;找出只包含 1 的最大矩形&#xff0c;并返回其面积。 输入&#xff1a;matrix [["1","0","1","…

6-创建和查询

创建&查询 DDL - 表操作 - 查询 查询当前数据库所有表 查询库表之前需要先试用 use 数据库名 进入数据库才可以查询到该数据库的库表, 否则将会出现未选择数据库的报错; 如果数据库中并无数据表, 则会出现 Empty set 的相应结果 SHOW TABLES;切换到 sys 数据库, 并且查询库…

【Java面试】MySQL的聚集索引和非聚集索引的区别?

一、存储结构的本质差异 物理存储的哲学冲突 聚集索引的本质是将数据行的物理存储顺序与索引键值的逻辑顺序强制绑定&#xff0c;这种设计源于计算机科学的局部性原理&#xff08;Locality Principle&#xff09;。 为什么选择B树&#xff1f; B树的平衡多路特性&#xff08;通…

LRU缓存设计与实现详解

LRU缓存设计与实现详解 一、LRU缓存核心概念1.1 LRU策略定义1.2 应用场景1.3 核心操作要求 二、数据结构设计&#xff1a;双向链表哈希表2.1 为什么选择双向链表&#xff1f;2.2 为什么结合哈希表&#xff1f;2.3 节点结构设计&#xff08;双向链表&#xff09;2.4 LRU缓存的逻…

RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制

channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true); channel.basicReject(message.getMessageProperties().getDeliveryTag(), false); channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 在RabbitMQ中&#xff0…

UNIAPP入门基础

一、开发环境准备 1. 安装 HBuilderX(官方推荐IDE) 下载地址:HBuilderX 官网 版本选择: App开发版:开箱即用,内置 UniApp 插件 标准版:需手动安装 UniApp 插件(运行时会提示) 安装步骤: Windows:双击安装包,勾选“创建桌面快捷方式” macOS:拖拽到 Applications…

前端单点登录

“前端单点登录&#xff08;SSO, Single Sign-On&#xff09;”是指在多个系统之间共享用户登录状态&#xff0c;使用户只需登录一次&#xff0c;就可以在多个子系统中使用同一身份访问资源&#xff0c;无需重复登录。 以下是一个典型的前端单点登录方案的介绍和实现思路&…

DiNA:扩张邻域注意力 Transformer

摘要 Transformer 正迅速成为跨模态、跨领域和跨任务中应用最广泛的深度学习架构之一。在计算机视觉领域&#xff0c;除了持续发展的纯 transformer 架构&#xff0c;分层 transformer 也因其优越的性能和在现有框架中易于集成而受到广泛关注。这类模型通常采用局部化的注意力…