vue实战-换皮肤2(使用less实现)

在上一节中我们通过动态切换html中css的引用路径实现了vue中的换皮肤功能。但是这种方法有一个缺陷,那就是只能用css的语法来实现。这个缺陷在某些变态的需求下会增加我们很多工作量,因此本节中将介绍vue中另一种换皮肤的实现思路,用less语法实现换肤。

上节中讲过,想要达到换皮肤的目的无非就是替换掉样式文件,而一般项目中使用less都会在style标签中import样式文件。但是现在我们想要达到动态加载样式文件的效果,因此就不能使用import了,而需要使用另一种引入样式文件的方法require。也就是说在每一个想要根据所选皮肤更改样式的页面都使用require来动态加载样式文件。

  • 在项目的main.js中的methods下新增_getLess方法用来根据当前所选皮肤获取样式文件,但是需要使用到mixin:
Vue.mixin({
    computed: {
        ...mapGetters([
            'templates'
        ]),
    },
    created() {
        var theme = localStorage.theme;
        if(theme) {
            this.templatesMu(theme);
        }
    },
    methods: {
        ...mapMutations([
            'templatesMu'
        ]),
        _getLess(filepath, filename) {
            console.log(this.templates)
            return require("./../static/template/" + this.templates + "/" + filepath + "/" + filename + "/index.less");
        },
    },
})

因为用到了vuex,所以还需要import进来:
import { mapState, mapGetters, mapMutations } from 'vuex'
_getLess方法传入两个用来标识样式文件位置的参数,调用该方法会动态的require一个样式文件。this.theme为store中存储的当前皮肤的信息,我们在选择皮肤时会将这个信息存储下来。并且我们要将皮肤相关的样式文件存储在_getLess方法对应的文件夹下。
在vuex中加入方法用于存储当前皮肤信息:

export default {
    state: {
        templates: "2", 
    },
    getters: {
        templates(state) {
            return state.templates;
          }
    },
    mutations: {
        templatesMu(state, val) {
            if (val) {
              state.templates = val;
            }
          },
    },
    actions: {
    
    }
}
  • 在具体的页面中的created方法中调用_getLess方法:
created: () {
    this._getLess("home","test1");
},

两个标识路径的参数方便程序的扩展。
这样当程序加载这个页面时会首先调用created方法,然后动态加载less样式文件。

  • 然后依旧是那个换皮肤的组件,我们将换皮肤的方法改造一下:
// 存储当前皮肤的信息
    setTheme(themeFile) {
      localStorage.theme = themeFile.data;
      this.$store.commit('templatesMu', themeFile.data);
      this.show = false;
      location.reload();
    }

这样就实现了用less语法来完成换皮肤功能。可以看到换皮肤之后调用了location.reload()方法直接刷新页面,这也是这个换皮肤的方法的最大的不足之处了,如果有更好的思路的话欢迎指正~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,804评论 1 45
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 3,151评论 1 4
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,457评论 0 21
  • 33、JS中的本地存储 把一些信息存储在当前浏览器指定域下的某一个地方(存储到物理硬盘中)1、不能跨浏览器传输:在...
    萌妹撒阅读 2,243评论 0 2
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,127评论 1 92

友情链接更多精彩内容