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

Vue3造輪子之Typescript配置highlight過程

 更新時(shí)間:2024年07月05日 10:29:20   作者:存梨  
這篇文章主要介紹了Vue3造輪子之Typescript配置highlight過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(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會(huì)導(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 的接口類型,但是會(huì)導(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' // 路徑對(duì)應(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)文章

  • 關(guān)于Element UI table 順序拖動(dòng)方式

    關(guān)于Element UI table 順序拖動(dòng)方式

    這篇文章主要介紹了關(guān)于Element UI table 順序拖動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue響應(yīng)式添加、修改數(shù)組和對(duì)象的值

    Vue響應(yīng)式添加、修改數(shù)組和對(duì)象的值

    有些時(shí)候,不得不想添加、修改數(shù)組和對(duì)象的值,但是直接添加、修改后又失去了getter、setter,由于JavaScript的限制, Vue不能檢測以部分變動(dòng)的數(shù)組
    2017-03-03
  • Vue中關(guān)于this指向的問題示例詳解

    Vue中關(guān)于this指向的問題示例詳解

    在Vue中,方法體里用this調(diào)用vue實(shí)例的數(shù)據(jù),有時(shí)會(huì)指向window,導(dǎo)致調(diào)用失敗報(bào)錯(cuò),這篇文章主要介紹了Vue中關(guān)于this指向的問題 ,需要的朋友可以參考下
    2022-07-07
  • vue修改數(shù)據(jù)視圖更新原理學(xué)習(xí)

    vue修改數(shù)據(jù)視圖更新原理學(xué)習(xí)

    這篇文章主要為大家介紹了vue修改數(shù)據(jù)視圖更新原理學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • vue父列表數(shù)據(jù)獲取子列表數(shù)據(jù)的實(shí)現(xiàn)步驟

    vue父列表數(shù)據(jù)獲取子列表數(shù)據(jù)的實(shí)現(xiàn)步驟

    本文檔將介紹如何通過點(diǎn)擊父列表(表格)中的數(shù)據(jù)行來獲取到子列表(表格)的數(shù)據(jù),代碼示例是基于Vue框架實(shí)現(xiàn)的一個(gè)組件,包含了父列表和子列表,通過點(diǎn)擊父列表的數(shù)據(jù)行來動(dòng)態(tài)獲取子列表的數(shù)據(jù),感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • vue單頁面如何解決多個(gè)視頻同時(shí)僅能播放一個(gè)問題

    vue單頁面如何解決多個(gè)視頻同時(shí)僅能播放一個(gè)問題

    這篇文章主要介紹了vue單頁面如何解決多個(gè)視頻同時(shí)僅能播放一個(gè)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue使用vue-cropper實(shí)現(xiàn)圖片裁剪之單圖裁剪的步驟

    vue使用vue-cropper實(shí)現(xiàn)圖片裁剪之單圖裁剪的步驟

    本文介紹在若依系統(tǒng)中使用vue-cropper實(shí)現(xiàn)固定尺寸圖片裁剪上傳的步驟,包括安裝、引入、封裝子組件、父級(jí)調(diào)用及參數(shù)接收,ruoyi.css已集成相關(guān)樣式,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Vue前后端不同端口的實(shí)現(xiàn)方法

    Vue前后端不同端口的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇Vue前后端不同端口的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 在vue中created、mounted等方法使用小結(jié)

    在vue中created、mounted等方法使用小結(jié)

    這篇文章主要介紹了在vue中created、mounted等方法使用小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue如何獲取圖片流數(shù)據(jù)并展示

    vue如何獲取圖片流數(shù)據(jù)并展示

    這篇文章主要介紹了vue如何獲取圖片流數(shù)據(jù)并展示問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

余庆县| 天祝| 邯郸县| 阿图什市| 尼勒克县| 凭祥市| 大洼县| 株洲市| 太白县| 齐齐哈尔市| 收藏| 灵武市| 游戏| 光山县| 额尔古纳市| 望江县| 亚东县| 蕲春县| 溧阳市| 嘉义市| 慈利县| 桓台县| 莱西市| 卢湾区| 光山县| 石渠县| 高唐县| 拜泉县| 庄河市| 太和县| 仪征市| 芜湖市| 开原市| 保亭| 乌拉特中旗| 宝应县| 南阳市| 建水县| 东安县| 仙桃市| 上饶市|