naive-ui切换主题

发布于:2025-05-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

1、在App.vue文件中使用

<script setup lang="ts">
import Dashboard from './views/dashboard/index.vue'
import { NConfigProvider, NGlobalStyle, darkTheme } from 'naive-ui'
import { useThemeStore } from "./store/theme";
// 获取存储的主题类型
const themeStore = useThemeStore()
</script>

<template>
  <n-config-provider :theme="themeStore.darkTheme ? darkTheme: null">
    <dashboard />
    <!-- 这里不能忽略,否则不生效 -->
    <n-global-style />
  </n-config-provider>
</template>

2、dashboard/index.vue文件(生成两个简单的按钮来进行主题切换测试)

<script setup lang="ts">
import { useThemeStore } from "../../store/theme";
const themeStore = useThemeStore()

const changeTheme = (val: boolean) => {
  // 将数据存储到pinia,true深色主题,false浅色主题 
  themeStore.changeDarkTheme(val)
}
</script>

<template>
  <div class="operate">
    <span @click="changeTheme(true)">深色</span>
    <span @click="changeTheme(false)">浅色</span>
  </div>
</template>

<style lang="scss" scoped>
.operate {
  position: absolute;
  top: 50px;
  right: 100px;
  span {
    display: inline-block;
    width: 80px;
    cursor: pointer;
  }
}
</style>

3、store/theme.ts

import { defineStore } from 'pinia'

export type Theme = {
    darkTheme: boolean,
}

export const useThemeStore = defineStore("useThemeStore", {
    state: (): Theme => ({
        darkTheme: false,
    }),
    actions: {
       changeDarkTheme(val: boolean) {
           this.darkTheme = val
       },
    },
    getters: {
        getDarkTheme: (state) => state.darkTheme
    }
})

网站公告

今日签到

点亮在社区的每一天
去签到