vue項目換膚製作

vue項目換膚製作

最近公司一個項目是有個需求是,一個網站集成4個公司的品牌,按要求需要點擊換風格皮膚。
在這裏插入圖片描述
通過點擊上面4個按鈕實現數據切換,我將上面按鈕進行組件封裝,放入header組件中,在點擊的時候使用vuex傳遞數據到app.vue中。

vuex 中綁定事件

export default new Vuex.Store({
  state: {
    skin: 'HH'
  },
  mutations: {
    changeSkin (state, str) {
      state.skin = str
    }
  }
})

在四個品牌上綁定點擊事件,提交事件

brandChange: function (currentImage, id) {
  // 通過commit提交獲取的id數據到store
  this.$store.commit('changeSkin', id)
  //通過id 請求 獲取不同品牌的數據源 和 不同皮膚
  console.log(this.$store.state.skin)
}

然後在app.vue中使用計算屬性獲取id,並綁定class到#app上

<template>
  <div id="app" :class="className">
    <Header brandId="HH"/>
    <RightNav />
  </div>
</template>
<script>
import Header from '@/components/Header.vue'
import RightNav from '@/components/RightNav.vue'
export default {
  name: 'app',
  data() {
    return{}
  },
  components: {
    Header,
    RightNav
  },
  computed: {
    className: function () {
      // 隨時獲取store中的skin數據,依據版本替換class
      return this.$store.state.skin
    }
  },
}
</script>
<style lang="less">
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
</style>

新建一個less文件用以切換class,在main.js中引入,我們只要將需要變動的顏色,圖標單獨放在這裏面,就能實現皮膚切換。
格式如下:

.hh{
	/*some less*/
}
.ii{
	/*some less*/
}
.tao{
	/*some less*/
}

這樣就能完成皮膚切換,當然,我們還可以通過切換id實現數據源的切換,實現方式也是一樣的。
項目地址bigscreen,我會陸陸續續的繼續完善整個項目,希望幫到的同學能star一下,現在工作真難找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章