Переключатель тем в разделе Vue используйте меньше и И-Дизайн-Vue

#vue.js #less #ant-design-vue

Вопрос:

Я пытаюсь реализовать переключение тем между тремя темами. Темная, Светлая и 3-я тема. Моя идея состоит в том, чтобы определить 3 переменные.меньше файлов, по одному для каждой темы. В файле я заново определяю цвета antd. Сброс.меньше будет импортировать переменную.меньше для сброса цветов, определенных в antd.меньше. Как в приведенном ниже коде:

 // dark theme
.dark {
  @import '~ant-design-vue/dist/antd.less';
  @import "styles/asia-info/themes/dark-theme/reset.less";
  @import "styles/asia-info/themes/dark-theme/components.less";
  @import (css) "../common.css";
}

// Light theme
.light {
  @import "~ant-design-vue/dist/antd.less";
  @import "styles/asia-info/themes/light-theme/reset.less";
  @import "styles/asia-info/themes/light-theme/components.less";
  @import (css) "../common.css";
}

//3rd theme
.china-mobile {
  @import '~ant-design-vue/dist/antd.less';
  @import "styles/china-mobile/reset.less";
  @import "styles/china-mobile/components.less";
  @import (css) "../common.css";
}
 

Но приведенный выше код не работает. Я думаю, проблема в том, что вы не можете импортировать один и тот же antd.меньше файлов в меньшем количестве. Я попытался добавить (несколько) ключевых слов при импорте одного и того же файла, но для компиляции vue-cli требуется вечность. Так что теперь то, что я делаю, это:

 // dark theme
.dark {
  @import '~ant-design-vue/dist/antd.less';
  @import "styles/asia-info/themes/dark-theme/reset.less";
  @import "styles/asia-info/themes/dark-theme/components.less";
  @import (css) "../common.css";
}

// light theme (import and.less and common.css in main.js in Vue)
@import "styles/asia-info/themes/light-theme/reset.less";
@import "styles/asia-info/themes/light-theme/components.less";

// 3rd theme
.china-mobile {
  @import '~ant-design-vue/dist/antd.less';
  @import "styles/china-mobile/reset.less";
  @import "styles/china-mobile/components.less";
  @import (css) "../common.css";
}
 

Если у меня есть только темная и светлая тема, я импортирую antd.меньше в main.js для легкой темы и импортируйте antd.меньше 2-го раза внутри .темнота для темной темы. Кажется, это работает.
Но когда я добавляю 3-ю тему, так как тот же antd.меньше импортируется снова, когда я переключаюсь на 3-ю тему, цвета не меняются.

Прямо сейчас решение, которое я вижу, состоит в том, чтобы сбросить цвета для каждого класса antd в 3-й теме. Но это действительно хлопотно, есть так много классов, которые я должен сбросить. Интересно, есть ли лучшее решение?