Vuetify 条件黑暗主题

Vuetify conditional dark theme

我正在使用 Vuetify 创建我的社交媒体网站。我现在面临的问题是我想使用深色属性,这样用户就可以在普通主题和深色主题之间切换。问题是我不能使用 Vue 的任何条件渲染方法,因为 dark 不是您可以绑定的属性。以下是您用来应用深色主题的部分代码:

<v-app dark>

darklight 不是属性,它们是 props 可以取值,在这种情况下 truefalse

您可以在 vuetify 的文档中找到它。

Props 是用于与子组件通信的属性。并以:为前缀,以区别于普通属性。

来到解决方案。

<v-app :dark="true"> 

<v-app :dark="false"> 

您可以将 true 或 false 替换为任何反应性数据选项或计算属性,以编程方式更改主题。

如果一个组件被用作App:

<template>
   <v-app :dark="isDark"></v-app>
</template>

<script>
   export default {
      data () {
         return {
            isDark: false,
         }
      },
   }
</script>

也可以从app实例调用

通过其实例化对象定义属性 app.__vue__.isDark = isDark 当被实例化时:

const app = new Vue(
    {
        data: () => ({
            isDark: false
        }),
    }
)

所以可以从其他组件调用

正如 documentation 所说,您可以只更新变量 this.$vuetify.theme.dark:

You can manually turn dark on and off by changing this.$vuetify.theme.dark to true or false.

能够与 localstorage

保持主题

plugins/vuetify.jsplugins/vuetify.ts 内添加:

export default new Vuetify({
  theme: {
    //
    dark: localStorage.getItem('theme') === 'dark',
    //
  }
})

然后在要切换主题的按钮上应用以下功能:

switchTheme() {
  this.$vuetify.theme.dark = !this.$vuetify.theme.dark;

  localStorage.setItem('theme', this.$vuetify.theme.dark ? 'dark' : 'light');
}