vue利用指令使用highlight.js

在项目中遇到使用Codemirror展示大量代码导致性能问题,改用highlight.js进行代码高亮,通过Vue指令实现预览效果。首先安装highlight.js,然后创建局部指令,遍历并应用高亮到每个代码块。此外,了解了Vue指令的生命周期钩子,如inserted、bind、update等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本身项目中使用的codemirror展示和编辑代码,但是遇到一个场景是一个页面展示十几二十个表格要展示,相当于使用多次,使用codemirror性能会很差,而且也是展示代码高亮,只预览不编辑,后面招待了highlight.js,直接使用不生效,后面采用的是指令的方式

1,安装highlight.js
cnpm i highlight.js -S
2,使用局部指令
// html
<pre v-highlight><code ref="codeSql" class="sql">{{sqlItem.content}}</code></pre>
// js
directives: {
    highlight: {
      function(el) {
        const blocks = el.querySelectorAll('pre code')
        blocks.forEach(block => {
          hljs.highlightBlock(block)
        })
      }
    }
  }
使用vue指令的时候自己总结了一下指令的一些属性

全局指令

Vue.directive('highlight', function(el) {
  let blocks = el.querySelectorAll('pre code')
  blocks.forEach(block => {
    hljs.highlightBlock(block)
  })
})

局部指令

directives: {
    highlight: {
      function(el) {
        let blocks = el.querySelectorAll('pre code')
        blocks.forEach(block => {
          hljs.highlightBlock(block)
        })
      }
    }
  },

局部指令

// 钩子函数,被绑定元素插入父节点时调用 (父节点存在即可调用,不必存在于 document 中)。
      inserted(el){
        el.focus()
        console.log( 'inserted' );
      },
      // 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
      bind(){
        console.log( 'bind' );
      },
      // 所在组件的 VNode 更新时调用,但是可能发生在其孩子的 VNode 更新之前。
      // 指令的值可能发生了改变也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 
      update(){
        console.log( 'update' );
      },
      // 所在组件的 VNode 及其孩子的 VNode 全部更新时调用。
      componentUpdated(){
        console.log( 'componentUpdated' );
      },
      // 只调用一次,指令与元素解绑时调用。
      unbind(){
        console.log( 'unbind' );
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值