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

Vue+Element多套主题切换

Vue3.x + Element Plus与Vue2.x + Element ui多套主题的切换方案

demo地址 Vue+Element更换主题: Vue + Element项目,更换几套主题的方案

思路很简单,就是写好每套样式,写个切换功能,切换主题即可

具体实现方案:

  1. 准备多套css主题,覆盖element的样式,或者自己写样式;主题的同级目录加个引入主题的js脚本,如下
    // index.js
    // 引入主题的方法
    
    // defaultTheme 就是某个主题文件名称的字符串,如'default',只是我把写在了config中,这里也可以直接定义赋值
    import { defaultTheme } from '@/config/index.js'
    
    // 主题名称要存储在localStorage中,这样切换主题刷新页面后效果不丢失
    let theme = localStorage.getItem('theme')
    theme = theme ? theme : defaultTheme
    
    // 根据所选的主题名称引入主题样式
    import(`./${theme}.scss`)
    // green.scss
    
    // 覆盖掉Element Plus默认的样式
    // 注意,element ui 与element plus的主题覆盖的写法不一样,整个主题切换方案,element ui 与element plus只有这里有差异
    // 下面是element plus的覆盖写法
    @forward 'element-plus/theme-chalk/src/common/var.scss' with (
    	$colors: (
    		'primary': (
    			'base': #67c23a,
    		),
    	)
    );
    @use 'element-plus/theme-chalk/src/index.scss' as *;
    
    // 在这里面直接写css样式也可以
    .btn {
    	background-color: #67c23a;
    }
  2. 写个切换主题的下拉框
    <template>
        <!-- 主题切换 -->
        <el-select class="theme" v-model="theme" @change="themeChange" size="small">
            <el-option v-for="(item, index) in themeList" :key="index" :value="item.value" :label="item.name"></el-option>
        </el-select>
    </template>
    
    <script>
    import { themeList, defaultTheme } from '@/config';
    
    export default {
    	data() {
    		return {
    			theme: '',
    			themeList,
    		};
    	},
    	created() {
    		this.themeInit();
    	},
    	methods: {
    		// 主题初始化
    		themeInit() {
    			let theme = localStorage.getItem('theme');
    			this.theme = theme ? theme : defaultTheme;
    		},
    
    		// 切换主题
    		themeChange(val) {
    			localStorage.setItem('theme', val);
    			window.location.reload();
    		},
    	},
    };
    </script>
    
  3. 在main.js中引入主题
  4. 已经OK了,再附上config.js
    // config/index.js
    
    // 默认主题
    export const defaultTheme = "green"
    
    // 所有主题
    export const themeList = [
        { name: '默认主题', value: 'default' },
        { name: '绿色主题', value: 'green' },
    ]


http://www.kler.cn/a/292836.html

相关文章:

  • 信号-3-信号处理
  • C语言 | Leetcode C语言题解之第556题下一个更大元素III
  • 随时随地编码:香橙派Zero3上安装Code Server远程开发指南
  • PHP多门店医疗服务系统小程序源码
  • 【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑
  • 什么是数字图像?
  • MLLM(一)| 文/图生视频任务大升级,BigModel 开源了视频模型CogVideoX
  • mysql开启远程访问
  • TCP/IP网络编程:第18章聊天室
  • 面向GPU计算平台的归约算法的性能优化研究
  • Rust 中 `madvise` 和 `posix_fadvise`的区别
  • python文件自动化(4)
  • 了解一下HTTP 与 HTTPS 的区别
  • FP7195:非同步升压恒流LED区动IC
  • C#实战|大乐透选号器[3]:动态生成大乐透蓝球区选择球及实现拖动窗体功能
  • Flask+LayUI开发手记(六):树型表格的增删改查
  • 网络编程 0905作业
  • 在ABAP开发中,BSEG和BKPF的数据如何做关联查询?
  • Unity(2022.3.41LTS) - UI详细介绍-TMP
  • WordPress的安装与简单开发教程
  • springboot 配置ssl支持https
  • 软通动力子公司鸿湖万联重磅发布SwanLinkOS 5,擘画开源鸿蒙AI PC新篇章
  • 七、装饰器模式
  • 薄膜制造革新-平扫式自动风环测厚仪
  • 基于 Python 的 LIF 模型:探索神经元同步与小世界网络
  • Ubuntu20上的Qt程序连接Windows上的mssql服务器