Nuxt3-Element Plus黑暗模式

Nuxt3 + Element-Plus + VueUse黑暗模式

Nuxt3-Element Plus黑暗模式

本篇會教你導入Nuxt3 + Element-Plus + VueUse黑暗模式,極簡版!!

爬了很多篇文章,黑暗模式導入有點繁瑣,感覺在看天書(可能是我的問題??)

因此決定寫一篇極簡化Dard Mode導入方式

Element-UI (Nuxt2)Element-Plus(Nuxt3),不兼容(別搞怪)
基本上以.js為主,.ts請自己轉譯,都差不多
因作者習慣,本篇使用<script>版本
<script setup>版本在VueUse Dark Mode有講,不過註冊方式都一樣 :)

原生的Element-Plus DardMode沒辦法動態切換,需要靠VueUse的DarkMode

1. 安裝環境

#在你的專案根目錄安裝套件 package.json導入

# 主程式
npm i element-plus

# 想需要使用element自帶的Icon會需要它
npm i @element-plus/icons-vue

# 這兩個可以讓黑暗模式動態切換
npm i @vueuse/core --save-dev
npm i @vueuse/nuxt --save-dev

2. 將Element-Plus組件導入Nuxt3

這邊需要將組件註冊進Nuxt3的nuxt.config.js才可以使用,要創建一個plugins,裡面新增1個element-plus.js的檔案,Nuxt3會自動註冊plugins裡的組件

# plugins/element-plus.js
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import ElementPlus from 'element-plus/dist/index.full'
import { defineNuxtPlugin } from '#app'
export default defineNuxtPlugin((nuxtApp) => {
  for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    nuxtApp.vueApp.component(key, component)
  }
  nuxtApp.vueApp.use(ElementPlus)
})

2.1 nuxt.config.js 添加build

因為element-plus沒有添加到nuxt3的webpack環境,所以要自己加~~

CSS也要註冊,不然會GG

# nuxt.config.js
export default ({
  ssr: false, // Disable Server Side rendering
  css: ['element-plus/dist/index.css'], // import css
  build: {
    transplie: [/^element-plus/]
  }
})

3. Element-Plus測試

先測試el-button,隨便找個.vue測試,看起來可以!!

4. Element-Plus導入VueUse黑暗模式

直接在layouts/default.vue貼上下面這段代碼,就可以進行切換..就是這麼簡單!

沒有註冊plugins,主要是用不到,一般都放在layouts對吧?import就好
# layouts/default.vue
<template>
  <div>
    <el-switch
      v-model="isdark"
      inline-prompt
      active-icon="Moon"
      inactive-icon="Sunny"
      active-color="dark"
      inactive-color="#000000"
      size="large"
    />
    <NuxtPage />
  </div>
</template>

<script>
import { useDark } from '@vueuse/core'
export default {
  data () {
    return {
      isdark: useDark()
    }
  }
}
</script>
<style>
/*黑暗模式*/
@import 'element-plus/theme-chalk/dark/css-vars.css';
</style>

Element-Plus官方的黑暗模式說明,如果有切換,那麼class會變dark

# 一般模式
<html>
  <head></head>
  <body></body>
</html>

# 黑暗模式
<html class="dark">
  <head></head>
  <body></body>
</html>

5. Element-Plus導入VueUse黑暗模式-進階版

有人會說: 诶,那我想在正常模式和黑暗模式中自定義切換style呢?

想要黑暗模式時文字變綠色、正常模式文字變藍色?

直上程式碼,但有坑,要注意看完喔!!!

layouts的default.vue改成下面這段代碼!

# layouts/default.vue
<template>
  <div>
    <el-switch
      v-model="isdark"
      inline-prompt
      active-icon="Moon"
      inactive-icon="Sunny"
      active-color="dark"
      inactive-color="#000000"
      size="large"
    />
    <div class="mycss">
      這是自訂dark的CSS
    </div>
    <NuxtPage />
  </div>
</template>

<script>
import { useDark } from '@vueuse/core'
export default {
  data () {
    return {
      isdark: useDark()
    }
  }
}
</script>
<style scoped>
.mycss{
    color: rgb(4, 0, 255);
}
html.dark .mycss{
    color: palegreen;
}
</style>
<style>
/*黑暗模式*/
@import 'element-plus/theme-chalk/dark/css-vars.css';
</style>

5.1 在assets增加一個main.css並註冊html標籤

如果不這麼做,那麼自定義的黑暗模式的css樣式會GG

assets資料夾裡面的的*.css會自動註冊,不用去nuxt.config的css添加

(不一定要用main.css,開心就好)
# assets/main.css
#註冊一個全域的html標籤,內容隨便,沒有強制,這邊作者隨便塞一個文字加粗
html * {
    font-weight: bold;
}

之後在class前面加 html.dark就可以了


以上是Nuxt3+Element-Plus+VueUse的動態切換黑暗模式