uniapp中vuex+scss变量更换主题色

第一步:vuex中创建store文件目录index.js文件

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
	state: {
		// 写上默认皮肤的数据
		skin: '#6aa6ff'
	},
	//计算属性state的值改变过后的值更新
	getters: {
		skin: state => state.skin
	},
	mutations: {
		// 皮肤更换
		setSKIN(state, data) {
			if (data) {
			//防止vuex刷新丢失,存入到本地
				uni.setStorageSync('skin_key', data);
				state.skin = data;
			} 

		}
	}
})

第二步 创建一个 mixin 文件 因为每个页面都是用 mapGetters 方式获取值

import {mapGetters} from 'vuex'
export default {
	install(Vue) {
		Vue.mixin({
			computed: {
				...mapGetters(['skin'])
			}
		})
	}
}

第三步直接在main.js 中引入

//引入自行更换路径
import store from '@/store/index.js'
//每个页面引入换肤的计算属性
import mixin from '@/store/mixin .js'
Vue.use(mixin)
const app = new Vue({
	store,
	...App
})

第四步页面使用 因为在main.js 中引入了公共的 mapGetters 所以在页面就不用单独引用了

在最外层的div中加入 :style="{'--skin':skin}"
//在使用颜色变量的地方使用
	.text {
		color:var(--skin);
	}

第五步在切换颜色页面的方法

    	<!-- 切换皮肤的颜色 -->
			<view class="card">
				<view class="titleText">请选择皮肤风格</view>
				<radio-group @change="radioChange" name="current" class="radioStyle">
					<label class="h-flex-x list-item" v-for="(item, index) in items" :key="index">
						<view>
							<radio :value="item.id"  :checked="item.id=== current" />
						</view>
						<view>{{item.name}}</view>
					</label>
				</radio-group>
			</view>

           data(){
             return{
             items: [{
				 	 id:'0',
				 	 name:'默认',
				 	 setColor:'#6aa6ff',
				 	checked:true
				 },
				 {
				 	 id:'1',
				 	 name:'红色',
				 	 setColor:'#c02c38'
				 },
				{
					 id:'2',
					 name:'绿色',
					 setColor:'#1dbfab'
				}],
				current:'0'
             }
},
 // 选中的radio赋值
	onReady() {
			this.current=uni.getStorageSync('radio_key')?uni.getStorageSync('radio_key'):'0';
		},
   methods:{
     radioChange(e) {
				this.current = e.detail.value;
				var skinItem = this.items[this.current].setColor;
				uni.setStorageSync('radio_key',this.current);
				this.$store.commit("setSKIN", skinItem);
			},
}
				

第六步,因为们每次进来app都是上次选中的颜色,所以在app.vue 文件中增加

created() {
			this.$store.commit('setSKIN',uni.getStorageSync('skin_key'))
		}

最后差不多功能就做完了,有不足的地方请多多指教
借鉴博客地址:https://zhuanlan.zhihu.com/p/635051054

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp定义全局变量可以通过使用SCSS来实现。首先,你需要在uni.scss文件引入一个variable.scss文件,可以使用以下代码: ```scss // 引入公共scss变量文件 @import './static/css/variable.scss'; ``` 接下来,你需要在App.vue文件的style标签添加lang="scss"属性,并在第一行引入uview-ui的index.scss文件以及其他需要的公共css文件,如base.css、common.scss和iconfont.css。可以使用以下代码: ```vue <style lang="scss"> /* 注意要写在第一行,同时给style标签加入lang="scss"属性 */ @import "uview-ui/index.scss"; /*每个页面公共css */ @import './static/css/base.css'; /* scss公共类 */ @import './static/css/common.scss'; @import './static/fonts/iconfont.css'; </style> ``` 接下来,你可以在common.scss文件使用@import指令引入variable.scss文件,并定义公共的样式类。例如,你可以使用以下代码定义一个color-primary类和一个bg-primary类,其使用了variable.scss文件定义的$primary-color变量: ```scss @import './variable.scss'; // 引入公共scss变量文件 // 公共类 .color-primary { color: $primary-color; } .bg-primary { background-color: $primary-color; color: #fff; } ``` 这样,你就成功在UniApp定义了全局的SCSS变量和样式类。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [uniapp 添加scss全局变量、scss公共类](https://blog.csdn.net/qq_40146789/article/details/124835164)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值