vue elementUI 切换主题

vueCli安装:

vueCli安装介绍

npm install -g @vue/cli
vue create template
cd template
npm run dev

elementUI安装

推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用。

npm i element-ui -S

完整引入
在 main.js 中写入以下内容:

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

new Vue({
  el: '#app',
  render: h => h(App)
});

自定义主题

自定义主题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
app.vue

<template>
	<div id="app">
		<router-view :key="$route.fullPath"></router-view>
	</div>
</template>

<script>
	export default {
		name: 'App',
		components: {}
	}
</script>

<style>
</style>

在src新建目录util> index.js
在这里插入图片描述
util> index.js

export function toggleClass(element, className) {
  if (!element || !className) {
    return;
  }
  element.className = className;
}

安装路由及js-cookie

npm i vue-router -D
npm install --save js-cookie

在src新建目录router > index.js
在这里插入图片描述

router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)
const routes = [{
		path: '/',
		name: 'index',
		meta: {
			title: '首页'
		},
		component: () => import('../views/index/index.vue')
	},
	{
		path: '/next',
		name: 'next',
		meta: {
			title: '测试'
		},
		component: () => import('../views/next/index.vue')
	}
]

const router = new VueRouter({
	mode: 'hash',
	base: "/",
	routes,
	scrollBehavior(to, from, savedPosition) {
		if (savedPosition) {
			return savedPosition
		} else {
			return {
				x: 0,
				y: 0
			}
		}
	}
})
router.beforeEach((to, from, next) => {
	if (to.meta.title) {
		document.title = to.meta.title
	}
	next()
})
export default router

main.js 引入router

import router from './router'

new Vue({
	router,
	render: h => h(App)
}).$mount('#app')

引入自定义主题颜色 整体代码 main.js

import Vue from 'vue';
import ElementUI from 'element-ui';
// import 'element-ui/lib/theme-chalk/index.css';

import "./assets/theme/black/index.css";
import "./assets/theme/white/index.css";
import "./assets/theme/default/index.css";
import App from './App.vue';
import router from './router'
Vue.use(ElementUI);

new Vue({
	router,
	render: h => h(App)
}).$mount('#app')

新建views (所有页面)
在这里插入图片描述
安装js-cookie用于切换页面 主题不变

npm install --save js-cookie

index/index.vue

<template>
	<div>
		<el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect">
			<el-menu-item index="1">处理中心</el-menu-item>
			<el-submenu index="2">
				<template slot="title">我的工作台</template>
				<el-menu-item index="2-1">选项1</el-menu-item>
				<el-menu-item index="2-2">选项2</el-menu-item>
				<el-menu-item index="2-3">选项3</el-menu-item>
				<el-submenu index="2-4">
					<template slot="title">选项4</template>
					<el-menu-item index="2-4-1">选项1</el-menu-item>
					<el-menu-item index="2-4-2">选项2</el-menu-item>
					<el-menu-item index="2-4-3">选项3</el-menu-item>
				</el-submenu>
			</el-submenu>
			<el-menu-item index="3" disabled>消息中心</el-menu-item>
			<el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
		</el-menu>
		<el-row>
			<el-button>默认按钮</el-button>
			<el-button type="primary">主要按钮</el-button>
			<el-button type="success">成功按钮</el-button>
			<el-button type="info">信息按钮</el-button>
			<el-button type="warning">警告按钮</el-button>
			<el-button type="danger">危险按钮</el-button>
		</el-row>

		<el-row>
			<el-button plain>朴素按钮</el-button>
			<el-button type="primary" plain>主要按钮</el-button>
			<el-button type="success" plain>成功按钮</el-button>
			<el-button type="info" plain>信息按钮</el-button>
			<el-button type="warning" plain>警告按钮</el-button>
			<el-button type="danger" plain>危险按钮</el-button>
		</el-row>

		<el-row>
			<el-button round>圆角按钮</el-button>
			<el-button type="primary" round>主要按钮</el-button>
			<el-button type="success" round>成功按钮</el-button>
			<el-button type="info" round>信息按钮</el-button>
			<el-button type="warning" round>警告按钮</el-button>
			<el-button type="danger" round>危险按钮</el-button>
		</el-row>

		<el-row>
			<el-button icon="el-icon-search" circle></el-button>
			<el-button type="primary" icon="el-icon-edit" circle></el-button>
			<el-button type="success" icon="el-icon-check" circle></el-button>
			<el-button type="info" icon="el-icon-message" circle></el-button>
			<el-button type="warning" icon="el-icon-star-off" circle></el-button>
			<el-button type="danger" icon="el-icon-delete" circle></el-button>
		</el-row>
		<el-main>
			<el-button-group>
				<el-button ref="toBlackFocus" type="primary" icon="el-icon-edit" @click="toggleTheme('custom-default')">默认</el-button>
				<el-button ref="toBlackFocus" type="primary" icon="el-icon-edit" @click="toggleTheme('custom-black')">黑色</el-button>
				<el-button ref="toWhiteFocus" type="primary" icon="el-icon-share" @click="toggleTheme('custom-white')">白色</el-button>
			</el-button-group>
			<el-button @click="goNext">去Next页面</el-button>
		</el-main>

	</div>
</template>

<script>
	import {toggleClass} from '@/util/index'
	import Cookies from 'js-cookie'
	export default {
		name: 'Layout',
		data() {
			return {
				select: '',
				// themecolor: ''
				activeIndex: '1',
			}
		},
		created() {
			console.log(this.$route)
		},
		mounted() {
			// 如果本地存在主题色从本地获取,并提交给root分发到页面进行渲染
			if (Cookies.get('themeColor')) {
				this.toggleTheme(Cookies.get('themeColor'))
			} else {
				this.toggleTheme('custom-black')
			}
		},
		methods: {
			toggleTheme(val) {
				Cookies.set('themeColor', val)
				toggleClass(document.body, val)
			},
			goNext() {
				this.$router.push({
					name: 'next',
				})
			},
			handleSelect(key, keyPath) {
				console.log(key, keyPath);
			}
		},
	}
</script>

<style scoped>
	::v-deep .el-button{
		margin: 20px;
	}
</style>

next/index.vue

<template>
	<div class="container">
		<el-badge :value="12" class="item">
			<el-button size="small">评论</el-button>
		</el-badge>
		<el-badge :value="3" class="item">
			<el-button size="small">回复</el-button>
		</el-badge>
		<el-badge :value="1" class="item" type="primary">
			<el-button size="small">评论</el-button>
		</el-badge>
		<el-badge :value="2" class="item" type="warning">
			<el-button size="small">回复</el-button>
		</el-badge>

		<el-dropdown trigger="click">
			<span class="el-dropdown-link">
				点我查看<i class="el-icon-caret-bottom el-icon--right"></i>
			</span>
			<el-dropdown-menu slot="dropdown">
				<el-dropdown-item class="clearfix">
					评论
					<el-badge class="mark" :value="12" />
				</el-dropdown-item>
				<el-dropdown-item class="clearfix">
					回复
					<el-badge class="mark" :value="3" />
				</el-dropdown-item>
			</el-dropdown-menu>
		</el-dropdown>

	</div>
</template>

<script>
	export default {
		data() {
			return {}
		},
		mounted() {},
	}
</script>

<style>
</style>

自定义样式 assets下新建目录css style.css
app.vue  style
style.css

.custom-black {
	background-color: black;
	color: #fff;
}

.custom-white {
	color: #333;
}

在main.js中引入
在这里插入图片描述

切换效果完成了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希望……

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值