实战篇:(六)创建属于自己的 Vue 3 组件库:主题切换与样式管理

创建属于自己的 Vue 3 组件库:主题切换与样式管理

构建一个主题化的 Vue 3 组件库需要多个步骤,包括项目的初始化、组件的创建、主题的实现和样式的管理。以下是详细的步骤和实现代码。

在这里插入图片描述

1. 初始化项目

使用 Vite 创建 Vue 3 项目:

npm create vite@latest my-vue3-component-library --template vue
cd my-vue3-component-library
npm install

在这里插入图片描述

如果执行 npm run dev 报错,可以检查 node 版本,保证版本 16+
在这里插入图片描述

2. 安装依赖

你可能需要安装一些额外的依赖,如 vuevue-router(如果你打算添加路由支持):

npm install vue@next

如果你还需要支持样式的预处理器(如 SCSS),可以安装 Sass:

下面代码已使用Sass,需要执行:

npm install -D sass

3. 项目结构

my-vue3-component-library/
├── node_modules/
├── public/
├── src/
│   ├── components/
│   │   ├── Button.vue
│   │   ├── Card.vue
│   │   └── ThemeSwitcher.vue
│   ├── styles/
│   │   ├── dark-theme.scss
│   │   └── theme.scss
│   ├── App.vue
│   ├── main.js
├── index.html
├── package.json
├── vite.config.js
└── ...

4. 创建基础组件

1.Button.vue

<template><button :class="`btn btn-${type}`" :disabled="isDisabled"><slot></slot></button>
</template><script>
export default {name: 'Button',props: {type: {type: String,default: 'primary',},isDisabled: {type: Boolean,default: false,},},
};
</script><style scoped>
.btn {padding: 0.5em 1em;border: none;border-radius: 5px;cursor: pointer;
}.btn-primary {background-color: #007bff;color: white;
}.btn-secondary {background-color: #6c757d;color: white;
}.btn:disabled {background-color: #ccc;cursor: not-allowed;
}
</style>

2.Card.vue

<template><div class="card"><h2>{{ title }}</h2><slot></slot></div>
</template><script>
export default {name: 'Card',props: {title: {type: String,required: true,},},
};
</script><style scoped>
.card {padding: 1em;border: 1px solid #ddd;border-radius: 5px;margin: 1em 0;
}
</style>

3.ThemeSwitcher.vue

<template><div><label><input type="checkbox" v-model="isDark" @change="toggleTheme" />切换主题</label></div>
</template><script>
export default {name: 'ThemeSwitcher',data() {return {isDark: false,};},methods: {toggleTheme() {this.isDark = !this.isDark;console.log('当前主题状态:', this.isDark);localStorage.setItem('isDark', this.isDark);document.body.classList.toggle('dark-theme', this.isDark);},},mounted() {const darkTheme = localStorage.getItem('isDark') === 'true';this.isDark = darkTheme;document.body.classList.toggle('dark-theme', darkTheme);},
};
</script><style scoped>
label {cursor: pointer;
}
</style>

4. 创建样式文件

1.theme.scss

body {background-color: #f8f9fa;color: #212529;transition: background-color 0.3s, color 0.3s;
}

2.dark-theme.scss

body.dark-theme {background-color: #343a40;color: white;
}

5. 更新 App.vue

<template><div id="app"><h1>主题化 Vue 组件库</h1><ThemeSwitcher /><Button type="primary">主按钮</Button><Button type="secondary">次按钮</Button><Button type="primary" :isDisabled="true">禁用按钮</Button><Card title="卡片标题"><p>这是卡片的内容。</p></Card></div>
</template><script>
import Button from './components/Button.vue';
import Card from './components/Card.vue';
import ThemeSwitcher from './components/ThemeSwitcher.vue';export default {name: 'App',components: {Button,Card,ThemeSwitcher,},
};
</script><style>
@import './styles/theme.scss';
@import './styles/dark-theme.scss';
</style>

6. 更新 main.js

import { createApp } from 'vue';
import App from './App.vue';
import './styles/theme.scss'; // 引入主题样式createApp(App).mount('#app');

7. 启动项目

现在可以启动项目:

npm run dev

8. 访问和测试

现在,你可以在浏览器中访问 http://localhost:3000,查看主题化的 Vue 组件库的效果。可以根据需要扩展组件和主题功能,添加更多样式和功能。你可以继续创建其他组件,并将它们添加到组件库中。

在这里插入图片描述
上一篇:
实战篇:(五)UniApp 中 Request 封装与使用全解析(避坑指南)
下一篇:
实战篇:(七)Vue2项目中使用 echarts(5.2.2)图表组件含代码

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

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

相关文章

Java基础14-网络编程

十四、网络编程 java.net.*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式: CS架构( Client客户端/Server服务端)、BS架构(Browser浏 览器/Server服务端)。无论是CS架构&#xff0c;还是BS架构的软件都必须依赖网络编程!。 1、网络通信的三要素 网络通…

堡垒机安装、链接服务器、数据库

堡垒机 JumpServer - 开源堡垒机 - 官网 下载安装包 jumpserver jumpserver.org (.org开源) 1、将安装包上传至虚拟机 &#xff08;1&#xff09;rz上传 &#xff08;2&#xff09;lftp登录 put下载 2、解压 [roothostname ~]# tar -xf jumpserver-ce-v4.2.0-x86_64.t…

认识Java的异常

异常机制 异常机制指的是程序出现错误时&#xff0c;程序的处理方式。 程序的错误分为三种&#xff1a; 编译错误&#xff1a;由于没有遵循对于语言的语法规则&#xff0c;编辑器可以自动发现并提示的错误位置和原因。逻辑错误&#xff1a;程序没有按照预期的顺序执行。运行…

Reality Capture 软件安装 附下载链接

Reality Capture 软件安装 文章目录 Reality Capture 软件安装一、Reality Capture v1.4汉化版安装包下载并解压二、Epic Games Launcher安装三、设置路径并安装![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f077210990674d9fa9c10b52338b52fe.png)四、启动Epic Ga…

第十四届中国国际健康产品展览会在沪举办,无限未来品牌大放异彩

2024 年&#xff0c;第十四届中国国际健康产品展览会、2024 亚洲天然及营养保健品展在上海成功举办。 此次展会聚焦天然及营养保健品领域&#xff0c;来自香港的 INFINITE FUTURE 无限未来品牌脱颖而出。无限未来将先进的营养科学与尖端数字技术融合&#xff0c;开发专业级营养…

Stylized Far East 古代国风建筑城镇宫殿场景模型

古代国风建筑城镇宫殿场景模型。内容: -演示场景(截图) - 种类繁多的建筑,如宫殿、商店、神社、房屋、餐馆、宝塔、寺庙等 -带有塔楼、门楼的模块化城堡墙 -树木、岩石、悬崖和其他自然资产 -传统装饰,如纸灯笼、绘画、瓷器等 - 城镇道具,如手推车、栅栏、板条箱、市场、…

【JavaEE】——TCP应答报文机制,超时重传机制

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;TCP协议&#xff08;面试重点重点&#xff09; 1&#xff1a;报头长度 2&#xff1a;…

今年双十一可以买啥?2024双十一不用做功课闭眼入的品牌好物分享!

今年的双十一购物狂欢节即将来临&#xff0c;许多消费者已经开始规划他们的购物清单&#xff0c;期待在这个一年一度的促销盛会上抢购到心仪的商品。2024年的双十一&#xff0c;你无需再做繁琐的功课&#xff0c;因为这里将为你分享一些闭眼入的品牌好物&#xff0c;让你轻松享…

unity Gpu优化

不一样的视角&#xff0c;深度解读unity性能优化。unity性能优化&#xff0c;unity内存优化&#xff0c;cpu优化&#xff0c;gpu优化&#xff0c;资源优化&#xff0c;资源包、资源去重优化&#xff0c;ugui优化。 gpu优化静态批处理静态批处理原理规则静态合批的原理静态合批的…

【Sceneform-EQR】(手势优化)通过手势事件实现在AR/VR等三维场景中的控制模型旋转、平移与缩放

在上一篇文档中&#xff0c;我们实现了通过手势控制模型节点的旋转、缩放和平移。现在本文将介绍如何优化上一篇做的手势控制器&#xff0c;从而实现更好的跟手效果。 相关链接&#xff1a;【Sceneform-EQR】&#xff08;手势控制器实现&#xff09;通过手势事件实现在AR/VR等…

网络安全中的RCE命令执行漏洞----入门小白必看

RCE命令执行&代码执行漏洞 RCE命令执行漏洞 RCE漏洞简介 RCE(remote code/command execute) 远程代码/命令执行漏洞 RCE漏洞是两个漏洞&#xff1a; 代码执行漏洞 # 针对后端语言!命令执行漏洞 # 针对系统! 如何产生 在 Web应用中有时候程序员为了考虑灵活性、简洁性…

【SEO】什么是SEO?

什么是SEO&#xff08;搜索引擎优化&#xff09;&#xff1f;为什么SEO对于⼀个⽹站⾄关重要&#xff1f; SEO 全称是搜索引擎优化&#xff08;Search Engine Optimization&#xff09; 因为我们目前开发的网址&#xff0c;需要人看到&#xff0c;除了通过宣传营销的方式展现…

前端布局与响应式设计综合指南(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Css篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:前端布局与响应式设计综合指南(二) 目录 23、行内元素和块级元素&#xff1f;img算什么&…

影刀RPA实战:操作Mysql数据库

1.摘要 影刀RPA&#xff08;Robotic Process Automation&#xff09;是一种软件自动化工具&#xff0c;它可以模拟人类用户执行各种重复性任务&#xff0c;其中包括对数据库的操作。 我们可以使用软件自动化指令&#xff0c;通过获取数据库窗口对象来操作数据库&#xff0c;也…

《探秘数据合规官CCRC-DCO人员能力验证》

在当今竞争激烈的商业世界中&#xff0c;“数据合规官CCRC-DCO人员能力验证”这个词逐渐走入人们的视野。但究竟什么是数据合规官CCRC-DCO人员能力验证呢&#xff1f; 首先&#xff0c;咱们来明确一下概念。数据合规官CCRC-DCO人员能力验证&#xff0c;简单来说&#xff0c;就…

数仓范式建模和维度建模有什么不同?

在数据库设计的复杂世界中&#xff0c;还有一类建模方法&#xff0c;为范式建模&#xff0c;是一种旨在优化数据库结构、提高数据一致性和完整性的设计方法。本文将深入探讨范式建模的概念、原理、步骤以及与维度建模的区别。 一、什么是范式建模&#xff1f; 范式建模是一种…

Chromium 中window.DOMParser接口说明c++

一、DOMParser DOMParser 可以将存储在字符串中的 XML 或 HTML 源代码解析为一个 DOM Document。 备注&#xff1a; XMLHttpRequest 支持从 URL 可寻址资源解析 XML 和 HTML&#xff0c;在其response 属性中返回Document。 你可以使用XMLSerializer 接口执行相反的操作 - 将…

接口测试自动化后起之秀-YApi接口管理平台

前言 众多接口管理工具如雨后春笋&#xff0c;让人欣慰的是&#xff0c;有许多优秀作品来自国内&#xff0c;包含Yapi和rap&#xff0c;看着中文的官网&#xff0c;华丽的汉语&#xff0c;不禁让人大快朵颐&#xff0c;暗自称爽。当然这也就带来另一个弊端&#xff0c;使用基数…

nodejs的卸载和nvm安装

由于项目需求&#xff0c;需要多版本控制的nodejs&#xff0c;所以要把原来的nodejs卸载干净&#xff0c;然后再装nvm 常见问题 1.在安装nvm的时候没有卸载node&#xff0c;导致使用nvm安装完之后&#xff0c;node和npm都不可用。 2.在第一次使用nvm安装node后&#xff0c;要…

从零开始使用最新版Paddle【PaddleOCR系列】——第二部分:自建数据集 + 模型微调训练

目录 一、自建数据集 1.官方数据集格式参考 2.自建数据集txt文件编写代码 3.数据集检验 二、模型训练 1.模型配置yaml文件 2.命令行指令训练 在上一篇文章中&#xff0c;构建好了paddleOCR 运行必需的环境&#xff0c;并通过在线下载的方式&#xff0c;使用官方训练好的模型进…