BOYYANG/1/blog/房间 金克丝4K动漫壁纸_彼岸图网

nuxt3中如何使用自定义指令结合highlight js 实现代码高

作者: boyyang
分类: 前端开发
发布: 2024-04-06 10:17:34
更新: 2025-03-31 05:49:15
浏览: 130
  • 安装highlight库
bun install highlight.js
  • 在项目的plugins中创建highlight.ts文件,如果没有plugins目录需要在根目录中创建该目录
  • 自定义指令
import hljs from 'highlight.js'
import {defineNuxtPlugin} from '#app'
import 'highlight.js/styles/atom-one-dark.min.css'

export default defineNuxtPlugin((nuxtApp) => {
    nuxtApp.vueApp.directive('highlight',
        {
            mounted(el) {
                let element = el.querySelectorAll('pre code')
                element.forEach((block: HTMLElement) => {
                    if (block.dataset.highlighted === 'yes') return
                    hljs.highlightElement(block)
                })
            },
            updated(el) {
                let element = el.querySelectorAll('pre code')
                element.forEach((block: HTMLElement) => {
                    if (block.dataset.highlighted === 'yes') return
                    hljs.highlightElement(block)
                })
            },
            getSSRProps(binding, vnode) {
                // 你可以在这里提供SSR特定的props
                return {}
            },
        },
    )
})

       为了避免数据更新后,代码没有重新高亮,所以在updated生命周期中对结构重新渲染,使用highiighted来判断当前结构是否已经渲染了

  • 在nuxt.config.ts配置文件中加上如下代码
plugins: [
        {
            src: '~/plugins/highlight.ts',
            mode: 'all',
        },
    ]


#nuxt3
#前端
#自定义指令
#highlight