• 1.定义主题js文件,对象动态键名获得值theme[themeName],暴露主题名方法出去
const theme = {
  chalk: {
    // 背景颜色
    backgroundColor: '#161522',
    // 标题的文字颜色
    titleColor: '#ffffff',
    // 左上角logo的图标路径
    logoSrc: 'logo_dark.png',
    // 切换主题按钮的图片路径
    themeSrc: 'qiehuan_dark.png',
    // 页面顶部的边框图片
    headerBorderSrc: 'header_border_dark.png'

  },
  vintage: {
    // 背景颜色
    backgroundColor: '#eeeeee',
    // 标题的文字颜色
    titleColor: '#000000',
    // 左上角logo的图标路径
    logoSrc: 'logo_light2.png',
    // 切换主题按钮的图片路径
    themeSrc: 'qiehuan_light.png',
    // 页面顶部的边框图片
    headerBorderSrc: 'header_border_light.png'
  }
}

export function getThemeValue (themeName) {
  return theme[themeName]
}

动态属性

  • theme['chalk']
  • 或者let ar='chalk' theme[ar]动态放入键名变量
  • 2、主题名存入状态机,改变和存取
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    theme: 'chalk'
  },
  mutations: {
    changeTheme (state) {
      if (state.theme === 'chalk') {
        state.theme = 'vintage'
      } else {
        state.theme = 'chalk'
      }
    }
  },
  actions: {
  },
  modules: {
  }
})
  • 3.对应界面改变状态机值
handleChangeTheme () {
      // 修改VueX中数据
     this.$store.commit('changeTheme')
    },
  • 4.界面使用:计算属性更换样式》》拿到状态机them值》》》再拿js文件里主题配置them下的具体每个值

//1.获取
import { mapState } from 'vuex'
computed: {
    ...mapState(['theme'])
  },

      //2计算样式
      containerStyle () {
      return {
        backgroundColor: getThemeValue(this.theme).backgroundColor,
        color: getThemeValue(this.theme).titleColor
      }
    },

    //3绑定
  <div class="screen-container" :style="containerStyle">
最近更新: 2022-09-22 16:10