最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3造輪子之Typescript配置highlight過程

 更新時(shí)間:2024年07月05日 10:29:20   作者:存梨  
這篇文章主要介紹了Vue3造輪子之Typescript配置highlight過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

項(xiàng)目基礎(chǔ)是 vue3+typescript 實(shí)現(xiàn)一個(gè)簡單的 UI 組件庫。

在編寫組件介紹文檔時(shí),需要提供一些代碼示例,這時(shí)候用到了 hightlight.js 來實(shí)現(xiàn)代碼的高亮。

一、安裝 highlight.js

執(zhí)行命令行進(jìn)行依賴以及類型聲明的安裝

yarn add highlight.js @types/highlight.js

安裝完成后,按照官方地址配置發(fā)現(xiàn)是無法使用的,報(bào)錯(cuò)情況如下

這個(gè)問題說明我們引入的類并沒有 vuePlugin 這個(gè)屬性

二、增加 highlight.ts 文件

那么我們基于 typescript 來使用 highlight.js 的話,就需要解決這個(gè) vue.use() 的問題。

查閱資料得知,需要增加一個(gè)定義 vue 外部插件的 highlight.ts

如下所示,可放心復(fù)制

import Hljs from 'highlight.js';
import 'highlight.js/styles/monokai-sublime.css'
// 自定義的interface會導(dǎo)致報(bào)錯(cuò)
// interface Highlightjs {
//    [x:string]:any
// }
//let Highlight:Highlightjs = {};
let Highlight:any = {};

Highlight.install = function (Vue:any,options:any) {

    Vue.directive('highlightA',{
        inserted:function(el:any){
            let blocks = el.querySelectorAll('per code');
            for (let i = 0; i < blocks.length; i++) {
                const item = blocks[i]
                Hljs.highlightBlock(item)
            }
        }
    })

    Vue.directive('highlightB',{
        componentUpdated:function(el:any){
            let blocks = el.querySelectorAll('per code');
            for (let i = 0; i < blocks.length; i++) {
                const item = blocks[i]
                Hljs.highlightBlock(item)
            }
        }
    })
}

export default Highlight

在這里曾嘗試定義一個(gè) Highlightjs 的接口類型,但是會導(dǎo)致報(bào)如下的錯(cuò)誤,而放棄

初步分析該報(bào)錯(cuò)的原因是 interface 里的類型定義還是存在一定的問題,所以用了 any 類型暴力解決了。

三、在入口文件引入

定義好 highlight.ts 文件后,在我們的入口文件 main.ts 中引入即可

下面的代碼可放心復(fù)制

import { createApp } from 'vue'
import router from './router'
import App from './App.vue'
import Highlight from './libs/types/highlight' // 路徑對應(yīng)你創(chuàng)建的highlight.ts的路徑

const app = createApp(App)
app.use(router)
app.use(Highlight)
app.mount('#app')

到此,我們就可以在 ts 文件中正常的引入 hightlight.js 并開始使用了。

個(gè)人測試驗(yàn)證第二、第三步不可行,以下是更正后的方法

四、在入口文件注冊指令

安裝好 highlight.js 之后,我們在入口文件注冊 vue 的自定義指令 directive

代碼如下

import { createApp } from 'vue'
import router from './router'
import App from './App.vue'
import hljs from 'highlight.js'
import 'highlight.js/styles/monokai-sublime.css'

const app = createApp(App)
app.use(router)

// 注冊自定義指令高亮代碼
app.directive('highlight', {
  // Directive has a set of lifecycle hooks:
  // called before bound element's parent component is mounted
  beforeMount(el:any) {
    // on first bind, highlight all targets
    let blocks = el.querySelectorAll('pre code');
    for(let i = 0 ;i < blocks.length ; i++){
      let item = blocks[i]
      console.log(item)
      hljs.highlightBlock(item)
    }
  },
  // called after the containing component's VNode and the VNodes of its children // have updated
  updated(el:any, binding:any) {
    // after an update, re-fill the content and then highlight
    let targets = el.querySelectorAll('code');
    for (let i = 0; i < targets.length; i += 1) {
        let target = targets[i];
        if (typeof binding.value === 'string') {
        target.textContent = binding.value;
        }
        hljs.highlightBlock(target);
    }
  }
})

app.mount('#app')

這樣我們在組件中可以通過指令進(jìn)行代碼高亮的編寫了,示例如下

<pre v-highlight>
  <code class="javascript">
    let a = "hello world";
    console.log(a)
  </code>
</pre>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

皮山县| 万载县| 定日县| 新绛县| 崇仁县| 柏乡县| 什邡市| 万源市| 含山县| 常宁市| 淳安县| 梧州市| 平江县| 瑞昌市| 天台县| 云林县| 西宁市| 安宁市| 正定县| 团风县| 临安市| 桂阳县| 郎溪县| 纳雍县| 镇赉县| 新郑市| 尖扎县| 嘉义县| 井陉县| 宁河县| 高清| 临漳县| 门源| 土默特左旗| 安阳市| 宜兴市| 遂川县| 科技| 辽阳市| 建水县| 民丰县|