在vue中使用highlight让代码实现高亮
highlight官网(查看配色):https://highlightjs.org
highlight查看api地址:https://highlightjs.readthedocs.io
- 刚开始我是在入口文件main.js里面引入依赖,然后定义了指令
这里我选的是tomorrow-night-eighties样式,文件里面还有其他样式可供选择,因为我的样式是基于scss,所以引入的是对应的scss样式,如果是css样式可以引入
1 | import 'highlight.js/styles/tomorrow-night-eighties.css' |
1 2 3 4 5 6 7 8 9 | import hljs from 'highlight.js' import 'highlight.js/scss/tomorrow-night-eighties.scss' Vue.directive('highlight',function (el) { hljs.configure({useBR: true}); let blocks = el.querySelectorAll('pre code'); blocks.forEach((block) => { hljs.highlightBlock(block) }) }) |
- 在需要代码高亮的页面使用,v-highlight就是在main.js自定义的highlight指令,v-html里面就是需要动态渲染的代码,class是指高亮的代码语言,这里我指定的是sql语句,highlight.js 支持几十种种编程语言(https://highlightjs.org/download),既包括常见的 C、java、java、javascript、ruby、python、html、css、sql等,还支持 apache、nginx 这些配置文件的语法
1 | <pre v-highlight><code v-html="scriptText" class="sql"></code></pre><p><center>[wp_ad_camp_2]</center></p> |
3.然后页面就实现了代码高亮。
但是关键问题是,这个代码高亮页面是点击按钮以后的弹窗,当我点击第一次的时候代码是高亮的,但是当我关闭弹窗以后在点击这个代码它有的时候高亮,有的时候没有效果,然后查阅说是要使用hljs.initHighlighting()手动高亮,然后我也加了,但是还是没有实现,所以这种方法适合页面加载时就显示代码高亮的页面,对于我这种要点击实现代码高亮的页面不是很理想
重点来了(解决办法)
在需要代码高亮的页面引入highlight
1 2 3 4 5 6 7 8 9 | import hljs from 'highlight.js' import 'highlight.js/scss/tomorrow-night-eighties.scss' const highlightCode = () => { const block = document.querySelectorAll('pre code') hljs.configure({useBR: true}); block.forEach((el) => { hljs.highlightBlock(el) }) } |
1 | <pre><code v-html="scriptText" class="sql"></code></pre><p><center>[wp_ad_camp_3]</center></p> |
在vue中的mounted和updated生命周期里面调用highlightCode(),这样的话不论点击几次按钮,代码始终高亮,而不会出现上面那种情况
1 2 3 4 5 6 | mounted(){ highlightCode() }, updated(){ highlightCode() }, |
这个是我在vue中使用highlight遇到的问题,有错误之处希望大家多多指教