vue使用highlight.js的坑

最近用vue.js+django做了一個(gè)單頁(yè)blog,用marked.js解析markdown,但是代碼沒(méi)有高亮,看起來(lái)很丑。就用highlight.js高亮代碼,用法很簡(jiǎn)單

<link  rel="stylesheet">  
<script src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js"></script>  
<script>hljs.initHighlightingOnLoad();</script>

直接三行代碼就能實(shí)現(xiàn),然而在單頁(yè)應(yīng)用中不能高亮。
查了很多資料知道是vue-router的問(wèn)題,在路由改變時(shí),頁(yè)面將會(huì)重新渲染并且會(huì)移除事件,這里就把 highlight 的事件給移除了。

得到的解決方案是使用 Vue.js 的自定義指令,定義一個(gè)v-highlight 的指令來(lái)使得 pre code 中的代碼高亮。

#引入必要庫(kù)
<link  rel="stylesheet">  
<script src="http://cdn.bootcss.com/highlight.js/8.0/highlight.min.js"></script>  
#在main.js定義自定義指令 
Vue.directive('highlight',function (el) {
  let blocks = el.querySelectorAll('pre code');
  blocks.forEach((block)=>{
    hljs.highlightBlock(block)
  })
})
#在要使用高亮的地方使用v-highlight指令
<div v-html="Marked" v-highlight>
</div>

到此就能實(shí)現(xiàn)高亮了

我的效果圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容