欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)文章

  • vue?eslint報(bào)錯(cuò)error?"Component?name?"*****"?should?always?be?multi-word"解決

    vue?eslint報(bào)錯(cuò)error?"Component?name?"*****"

    這篇文章主要給大家介紹了關(guān)于vue?eslint報(bào)錯(cuò)error?“Component?name?“*****“?should?always?be?multi-word”的解決方法,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 函數(shù)式組件劫持替代json封裝element表格

    函數(shù)式組件劫持替代json封裝element表格

    這篇文章主要介紹了為大家函數(shù)式組件劫持替代json封裝element表格的過程思路及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 一文徹底搞懂Vue中scoped和/deep/原理

    一文徹底搞懂Vue中scoped和/deep/原理

    在Vue中,有兩種常用的CSS選擇器,用于修改組件樣式:scoped?和?/deep/(或?::v-deep),它們都是為了實(shí)現(xiàn)樣式的作用域,本文小編就來分別給大家介紹一下這兩種選擇器的原理,需要的朋友可以參考下
    2023-08-08
  • 使用vue3+vite導(dǎo)入圖片路徑錯(cuò)亂問題排查及解決

    使用vue3+vite導(dǎo)入圖片路徑錯(cuò)亂問題排查及解決

    使用vue3+vite開發(fā)的時(shí)候,導(dǎo)入svg圖片時(shí),同一個(gè)文件夾下的文件,其中一個(gè)路徑正常解析,另一個(gè)不行,更改文件名之后,該圖片文件就可以正常解析了,本文給大家介紹了使用vue3+vite導(dǎo)入圖片路徑錯(cuò)亂問題排查及解決,需要的朋友可以參考下
    2024-03-03
  • vue2.0 兄弟組件(平級)通訊的實(shí)現(xiàn)代碼

    vue2.0 兄弟組件(平級)通訊的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue2.0 兄弟組件(平級)通訊的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 關(guān)于vue-treeselect綁值、回顯等常見問題的總結(jié)

    關(guān)于vue-treeselect綁值、回顯等常見問題的總結(jié)

    這篇文章主要介紹了關(guān)于vue-treeselect綁值、回顯等常見問題的總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue如何通過點(diǎn)擊事件實(shí)現(xiàn)頁面跳轉(zhuǎn)詳解

    vue如何通過點(diǎn)擊事件實(shí)現(xiàn)頁面跳轉(zhuǎn)詳解

    頁面跳轉(zhuǎn),我們一般都通過路由跳轉(zhuǎn)實(shí)現(xiàn),通常情況下可直接使用router-link標(biāo)簽實(shí)現(xiàn)頁面跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于vue如何通過點(diǎn)擊事件實(shí)現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • vue中的attribute和property的具體使用及區(qū)別

    vue中的attribute和property的具體使用及區(qū)別

    本文主要介紹了vue中的attribute和property的具體使用及區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue子元素綁定的事件, 阻止觸發(fā)父級上的事件處理方式

    vue子元素綁定的事件, 阻止觸發(fā)父級上的事件處理方式

    這篇文章主要介紹了vue子元素綁定的事件, 阻止觸發(fā)父級上的事件處理方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue側(cè)邊欄動態(tài)生成下級菜單的方法

    vue側(cè)邊欄動態(tài)生成下級菜單的方法

    今天小編就為大家分享一篇vue側(cè)邊欄動態(tài)生成下級菜單的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09

最新評論