使用Vue指令實(shí)現(xiàn)Markdown渲染和代碼高亮
在前端開發(fā)中,我們經(jīng)常需要將Markdown格式的文本渲染成HTML并展示在頁面上,同時(shí)還希望能夠?qū)Υa塊進(jìn)行高亮顯示。今天我將分享一段代碼,通過Vue指令實(shí)現(xiàn)了這個(gè)功能。
首先,你需要安裝一些依賴。在你的項(xiàng)目中執(zhí)行以下命令:
pnpm add highlight.js marked @types/marked -D
接下來,我們來看一下具體的代碼實(shí)現(xiàn)。
在main.ts
文件中,我們需要注冊一個(gè)全局的Vue指令。代碼如下:
import { markedDirective } from './path/to/markedDirective' app.directive('marked', markedDirective)
在Vue組件中,你可以使用v-marked
指令來渲染Markdown文本,并對代碼塊進(jìn)行高亮顯示。示例代碼如下:
<template> <div v-marked:hl="code"></div> </template> <script setup lang="ts"> import 'highlight.js/styles/atom-one-dark.css' import code from '@/config/code.md?raw' </script>
上面的示例代碼中,我們導(dǎo)入了highlight.js
的樣式文件,并且使用code.md
文件中的Markdown文本作為示例。
接下來,讓我們來看一下具體的實(shí)現(xiàn)代碼。
首先,我們需要導(dǎo)入highlight.js
和marked
模塊,代碼如下:
import hljs from 'highlight.js' import { marked } from 'marked' import { Directive, DirectiveHook, nextTick } from 'vue'
然后,我們需要?jiǎng)?chuàng)建一個(gè)marked
的渲染器,并設(shè)置一些選項(xiàng),代碼如下:
const render = new marked.Renderer() marked.setOptions({ renderer: render, gfm: true, pedantic: false })
在Vue指令的具體實(shí)現(xiàn)中,我們定義了一個(gè)formatValue
函數(shù),該函數(shù)用于將Markdown文本渲染成HTML,并對代碼塊進(jìn)行高亮顯示。代碼如下:
const formatValue: DirectiveHook = async (el, binding) => { const html = marked(binding?.value ?? '') el.innerHTML = html await nextTick() if (binding.arg === 'hl') { const blocks = el.querySelectorAll('pre code') blocks.forEach((block: any) => { hljs.highlightBlock(block) }) } }
最后,我們將formatValue
函數(shù)作為Vue指令的mounted
和updated
鉤子的回調(diào)函數(shù)。這樣,每當(dāng)指令所綁定的值發(fā)生變化時(shí),都會(huì)重新渲染Markdown文本并對代碼塊進(jìn)行高亮顯示。代碼如下:
export const markedDirective: Directive = { mounted: formatValue, updated: formatValue }
到此為止,我們已經(jīng)完成了整個(gè)功能的實(shí)現(xiàn)。
總結(jié)一下,通過上述代碼,我們可以在Vue項(xiàng)目中使用v-marked
指令將Markdown文本渲染成HTML,并對其中的代碼塊進(jìn)行高亮顯示。這對于展示文檔、博客等場景非常有用。
以上就是使用Vue指令實(shí)現(xiàn)Markdown渲染和代碼高亮的詳細(xì)內(nèi)容,更多關(guān)于Vue Markdown渲染和代碼高亮的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于腳手架創(chuàng)建Vue項(xiàng)目實(shí)現(xiàn)步驟詳解
這篇文章主要介紹了基于腳手架創(chuàng)建Vue項(xiàng)目實(shí)現(xiàn)步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08快速解決Vue項(xiàng)目在IE瀏覽器中顯示空白的問題
今天小編就為大家分享一篇快速解決Vue項(xiàng)目在IE瀏覽器中顯示空白的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue純前端如何實(shí)現(xiàn)導(dǎo)出簡單Excel表格的功能
這篇文章主要介紹了如何在Vue項(xiàng)目中使用vue-json-excel插件實(shí)現(xiàn)Excel表格的導(dǎo)出功能,包括安裝依賴、引入插件、使用組件、設(shè)置表頭和數(shù)據(jù)、處理空數(shù)據(jù)情況、源代碼修改以解決常見問題,需要的朋友可以參考下2025-01-01vue父組件傳值子組件報(bào)錯(cuò)Avoid?mutating?a?prop?directly解決
這篇文章主要為大家介紹了vue父組件傳值子組件報(bào)錯(cuò)Avoid?mutating?a?prop?directly解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09在vue項(xiàng)目中引入highcharts圖表的方法(詳解)
下面小編就為大家分享一篇在vue項(xiàng)目中引入highcharts圖表的方法(詳解),具有很好的參考價(jià)值,希望對大家有所幫助2018-03-03Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn)
這篇文章主要介紹了Vue封裝一個(gè)TodoList的案例與瀏覽器本地緩存的應(yīng)用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04vue-resource 攔截器interceptors使用詳解
這篇文章主要介紹了vue-resource 攔截器interceptors使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01