电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

vue實現主題切換的多種思路分享

瀏覽:4日期:2022-09-29 09:41:12
目錄動態改變主題第一種辦法:動態組件第二種辦法,路由隔離總結額外補充基于css的兩種方法方法一 多套css方法二 scss動態切換變量動態改變主題

首先需要解決的是如何知道你需要顯示哪個主題,并且可以動態切換。我選擇的方法是queryString。

我們打開url的時候,可以在后面綴上?theme=xx,讀取這個xx儲存起來即可。

第一種辦法:動態組件

當主題的路由并沒有發生變化,僅是組件內部的樣式,功能發生了變化,我們可以將一個組件復制一遍,修改完后,通過懶加載和動態組件實現。

// 頁面組件<template> <div><component :is='themeName' /> </div></template><script> export default{name: ’Home’,components:{ theme1:()=>import(’@/theme/theme1/a’), theme2:()=>import(’@/theme/theme2/a’),},computed:{ themeName(){retun `theme${this.$store.state.themeId}` }} }</script>

在組件中,我將script部分抽離出來,因為大部分組件其實在邏輯上是相同。哪怕有一些不同,我們也可以直接在主題2的組件中更改,減少對主題1的影響。

//action.jsexport default{ name:’Theme1’, ....}<template><div class='theme1'></div></template><script> import action from ’../componentAction/action’ action.name=’Theme1’ export default action</script><style scoped></style>

這樣實現的有點是可以通過子組件的style scoped實現樣式隔離,同時功能數據上都會隔離,例如兩個子組件中的swiper不會相互影響。 同時,懶加載也減小了首頁的加載時體積。 后面再增加新增的主題也只是照貓畫虎而已。

第二種辦法,路由隔離

路由隔離其實就是簡單的theme1寫一個路由的數組,theme2寫一套路由。

// router.js{ path:’/theme3’, name:’theme3Index’, component: () => import(’../views/theme3/Index.vue’), children:[ {path: ’/theme3/entry’,name: ’theme3Entry’,component: () => import(’../views/theme3/entry.vue’), } ] }

這種辦法其實是下下之策,我使用這個主要是因為路由變化了,比如之前是直接進入a.vue,但是現在前面多加了一層entry頁面,所以只能改變路由。 這種辦法也實現了比較好的隔離。

總結

以上兩種思路是我針對于我們當前業務的思考,僅供參考。

其實這兩種方法都有一個共同的問題,就是代碼冗余。每個組件都避不可免的帶有一部分之前主題的代碼,雖然,大部分邏輯代碼可以抽離出來,但是css和template卻無法抽離。

如果每次一個主題增加一個dom,一個功能塊,如果每次都用v-if,那么其實代碼以后會更加難以維護。因此,我選擇了按照主題去劃分代碼。

額外補充基于css的兩種方法方法一 多套css

<!-- 中心 --><template> 動態獲取父級class名稱,進行一個父級class的多次定義 <div :class='className'> <div v-on:click='chang()'> {{ className == 'box' ? '開燈' : '關燈' }} </div> </div></template><script>export default { name: 'Centre', data() { return { className: 'box' }; }, methods: { // 改變class chang() { this.className === 'box'? (this.className = 'boxs') : (this.className = 'box'); } },};</script><style lang='scss'>當class為box 使用witch的css@import './style/witch.scss';當class為boxs 使用black的css@import './style/black.scss';.switch { position: fixed; top: 4px; right: 10px; z-index: 50; width: 60px; height: 60px; background: #fff; line-height: 60px; border-radius: 20%;}</style>

每個css文件樣式大致相同,只是最外層的父級不一樣,分別為.box 和.boxs

方法二 scss動態切換變量

我自己是分為了2個主要文件來做的

_variable.scss 變量管理文件 var()為css3中提出的聲明樣式變量的方法 var(屬性名,屬性值)注意屬性值不能是字符串

// 主題切換$bgColor:var(--backgroundColor,rgb(255,255,255));$fontColor:var(--fonntColor,rgb(0,0,0));$bgmColor:var(--backgroundMColor,rgb(238,238,238));$tableColor:var(--tableColor,rgb(218,218,218));$borderColor:var(--borderColor,rgb(238,238,238));$tablesColor:var(--tablesColor,rgb(255,255,255));$inputColor:var(--inputColor,rgb(255,255,255))

創建的_variable.scss 文件我在vue.config.js進行了一個全局的配置,沒有在組件中引入

css: { loaderOptions: { // 此文件為主題切換文件 sass: {prependData: `@import './src/styles/_variable.scss';`, }, }, },

publicStyle.js

這個方法可以去修改var定義的變量document.getElementsByTagName('body')[0].style.setProperty('屬性名', '替換的屬性值f');

// 主題切換const cut = (cutcheack) => { document.getElementsByTagName('body')[0].style.setProperty('--backgroundColor', cutcheack ? '#121212' : '#fff'); document.getElementsByTagName('body')[0].style.setProperty('--fonntColor', cutcheack ? '#cecece' : '#333'); document.getElementsByTagName('body')[0].style.setProperty('--backgroundMColor', cutcheack ? '#333' : '#eee'); document.getElementsByTagName('body')[0].style.setProperty('--tableColor', cutcheack ? '#000' : '#d8d8d8'); document.getElementsByTagName('body')[0].style.setProperty('--tablesColor', cutcheack ? '#222' : '#fff'); document.getElementsByTagName('body')[0].style.setProperty('--inputColor', cutcheack ? '#666' : '#fff'); document.getElementsByTagName('body')[0].style.setProperty('--borderColor', cutcheack ? '#666' : '#fff');};export default cut;

組件中使用

<!-- 首頁 --><template><div class=’home’> <el-switch v-model='cutcheack' active-color='#333' inactive-color='#13ce66' active-text='主題' @change='switchs'></el-switch></div></template><script>import cut from '../../utils/publicStyle.js';export default { name: 'Home', data() { return { cutcheack: false, //主題切換 }; }, methods: { // 左側導航隱藏或顯示 // 切換主題 switchs() { cut(this.cutcheack); }, },};</script><style lang=’scss’ scope>.home { height: 100%; width: 100%;background:$bgColor; .el-container {height: 100%;color:$fontColor; }}</style>

以上就是vue實現主題切換的多種思路分享的詳細內容,更多關于vue 主題切換的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 动物解剖台-成蚊接触筒-标本工具箱-负压实验台-北京哲成科技有限公司 | 算命免费_生辰八字_免费在线算命 - 卜算子算命网 | 卫生纸复卷机|抽纸机|卫生纸加工设备|做卫生纸机器|小型卫生纸加工需要什么设备|卫生纸机器设备多少钱一台|许昌恒源纸品机械有限公司 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 翅片管换热器「型号全」_厂家-淄博鑫科环保 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 上海恒驭仪器有限公司-实验室平板硫化机-小型平板硫化机-全自动平板硫化机 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 水厂自动化-水厂控制系统-泵站自动化|控制系统-闸门自动化控制-济南华通中控科技有限公司 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 99文库_实习生实用的范文资料文库站 | 警方提醒:赣州约炮论坛真的安全吗?2025年新手必看的网络交友防坑指南 | 书信之家_书信标准模板范文大全| elisa试剂盒-PCR试剂盒「上海谷研实业有限公司」 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 安徽合肥格力空调专卖店_格力中央空调_格力空调总经销公司代理-皖格制冷设备 | 长沙印刷厂-包装印刷-画册印刷厂家-湖南省日大彩色印务有限公司 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 艺术涂料|木纹漆施工|稻草漆厂家|马来漆|石桦奴|水泥漆|选加河南天工涂料 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | WTB5光栅尺-JIE WILL磁栅尺-B60数显表-常州中崴机电科技有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 板式换热器_板式换热器价格_管式换热器厂家-青岛康景辉 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 道达尔润滑油-食品级润滑油-道达尔导热油-合成导热油,深圳道达尔代理商合-深圳浩方正大官网 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 污水处理设备,一体化泵站,一体化净水设备-「梦之洁环保设备厂家」 |