美文网首页
Vue cli3 线上一键更换皮肤

Vue cli3 线上一键更换皮肤

作者: Monster_鼎辉 | 来源:发表于2021-03-25 15:16 被阅读0次

    自己有个外包项目刚好涉及到皮肤的更换,研究了好几天没找到正式环境中如何更换皮肤,当前最终还是搞定了,虽然可能不是最有效的方法,话不多话直接上代码吧

    vue本是单页面应用,每个页面都有一个<style>来写样式,我的办法是把所有页面的样式抽离出来,分成 dark/light 2个皮肤包放置到public目录下,不要说为什么我不放到src下 因为放到src下npm打包后css全部合并了,主题样式会被覆盖,所以要放置到public下,public下的css不会被打包,先看下我的目录


    截屏2021-03-25 下午2.57.27.png

    其中dark是黑暗系皮肤,light是亮色系皮肤,其中dark下是这样子的


    截屏2021-03-25 下午2.59.10.png
    因为我习惯采用stylus来写样式,所有配置了styl转css
    light文件夹和dark内的文件是一摸一样的,只是css样式更改了

    现在来引入css
    我写了一个引入的组件,代码如下:

    <template>
      <div>
        <remote-css
          :href="`/theme/${themeName}/element-ui.css`"
        />
        <remote-css
          :href="`/theme/${themeName}/Home.css`"
        />
    <!--    引入全部css-->
      </div>
    </template>
    
    <script>
    export default {
      name: 'ThemeLink',
      data () {
        return {
          themeName: window.config.dark ? 'dark' : 'light'
        }
      },
      components: { 'remote-css': {
        render (createElement) {
          return createElement('link', { attrs: { rel: 'stylesheet', href: this.href } })
        },
        props: {
          href: { type: String, required: true }
        }
      } }
    }
    </script>
    
    <style scoped>
    
    </style>
    
    

    然后在项目入口页面引入这个组件

    因为这种方式相当于加载的是远程css文件,所以切换皮肤时需要reload让项目重新加载,我这里直接把当前皮肤dark/light 存入到了localStorge中,项目重新加载后在main.js中根据localStorge的当前皮肤设置了下window.config.dark === localStorage.getItem('currentTheme') === 'dark', 然后皮肤切换组件就会加载相应的css文件了

    切记:样式抽离后的vue页面要把原先的style删除

    相关文章

      网友评论

          本文标题:Vue cli3 线上一键更换皮肤

          本文链接:https://www.haomeiwen.com/subject/vwalhltx.html