如何反应性地设置 <html> class

How to reactively set a <html> class

我有 2 个主题:'light-theme'、'dark-theme' 我想根据我在 vuex 商店中的值设置 <html class=""> 。喜欢darkMode: true

我怎样才能像那样被动地设置 <html> class?

(使用 vue3)

根据Vue docs,有以下方法可以做到这一点。

1.Binding 对象

<div :class="{ 'active-class': isActive }"></div>

以上语法意味着 'active-class' class 的存在将由数据的真实性决定 属性 isActive.

2.Binding 到数组

<div :class="[isActive ? activeClass : '', errorClass]"></div>

这将始终应用 errorClass,但 activeClass 仅在 isActive 为真时应用。

你可以使用简单的javascript。

只需添加一个按钮或切换主题更改,例如:

<button @click="changeTheme">Change Theme</button>

并在此组件内添加 changeTheme 方法 inside methods:

document.getElementsByTagName("html")[0].setAttribute( 'class', 'newThemeClass' );

或者直接将 watcher 添加到您的存储值中并根据它进行更改:

computed:{
    ...mapGetters(["yourGetterName"])
 },
watch: {
    darkMode(value) {
      document.getElementsByTagName("html")[0].setAttribute( 'class', value );
    },
  }