亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue如何實(shí)現(xiàn)動(dòng)態(tài)加載腳本

 更新時(shí)間:2020年02月05日 09:50:26   作者:古墩古墩  
這篇文章主要介紹了vue如何實(shí)現(xiàn)動(dòng)態(tài)加載腳本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了vue如何實(shí)現(xiàn)動(dòng)態(tài)加載腳本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

今天在研究,tinymce富文本編輯器怎樣在vue中使用,然后看到其它框架上的使用方法,它是動(dòng)態(tài)加載tinymce腳本的,若果在本地引入靜態(tài)文件或者,npm安裝都會(huì)導(dǎo)致vue項(xiàng)目打包體積過大,這種動(dòng)態(tài)腳本引入方式,是一個(gè)不錯(cuò)的實(shí)踐,下面上的代碼塊叫 dynamicLoadScript 顧名思義,動(dòng)態(tài)加載腳本,這個(gè)js只對(duì)加載tinymce有效,不過要想加載其它腳本,稍微做一下改動(dòng)即可

我們可以建立一個(gè)dynamicLoadScript.js文件

上代碼:dynamicLoadScript.js

let callbacks = [];//放一個(gè)數(shù)組放置回調(diào)函數(shù)

function loadedTinymce() {//檢測(cè)腳本是否加載好的方法 如果tinymce加載好了,window對(duì)象上會(huì)有tinymce屬性 若要加載其它腳本只需要將此判斷改一下即可
 // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
 // check is successfully downloaded script
 return window.tinymce
}

const dynamicLoadScript = (src, callback) => {
 const existingScript = document.getElementById(src);//獲取script標(biāo)簽元素
 const cb = callback || function() {};//拿到回調(diào)函數(shù)

 if (!existingScript) {//若沒有這個(gè)腳本的script標(biāo)簽
  const script = document.createElement('script');//創(chuàng)建一個(gè)script標(biāo)簽
  script.src = src // src url for the third-party library being loaded.
  script.id = src
  document.body.appendChild(script)
  callbacks.push(cb);//將回調(diào)函數(shù)加到callbacks數(shù)組中
  const onEnd = 'onload' in script ? stdOnEnd : ieOnEnd;//若是標(biāo)準(zhǔn)瀏覽器 有onload屬性 若是ie瀏覽器 沒有onload屬性
  onEnd(script)
 }

 if (existingScript && cb) {//若此script標(biāo)簽存在 并且有回調(diào)函數(shù)
  if (loadedTinymce()) {//檢測(cè)是否有tinymce屬性
   cb(null, existingScript);//若有tinymce對(duì)象,則執(zhí)行回調(diào)函數(shù)
  } else {
   callbacks.push(cb);//若沒有tinymce對(duì)象,則將回調(diào)函數(shù)加到回調(diào)函數(shù)數(shù)組內(nèi)
  }
 }

 function stdOnEnd(script) {//標(biāo)準(zhǔn)瀏覽器加載好腳本后
  script.onload = function() {//腳本加載成功后
   // this.onload = null here is necessary
   // because even IE9 works not like others
   this.onerror = this.onload = null;//將script標(biāo)簽的onload和onerror屬性置空
   for (const cb of callbacks) {//執(zhí)行回調(diào)函數(shù) 之所以用數(shù)組放置回調(diào)函數(shù)是應(yīng)對(duì) 我仍然事件的發(fā)生
    cb(null, script)
   }
   callbacks = null;//將callbacks置空
  }
  script.onerror = function() {//腳本加載失敗后
   this.onerror = this.onload = null;//將script標(biāo)簽的onload和onerror置空 覆蓋原生的onload事件和nerror事件
   cb(new Error('Failed to load ' + src), script);//腳本加載錯(cuò)誤后執(zhí)行回調(diào)函數(shù),返回報(bào)錯(cuò)信息
  }
 }

 function ieOnEnd(script) {//若是ie瀏覽器 
  script.onreadystatechange = function() {//腳本加載成功后
   if (this.readyState !== 'complete' && this.readyState !== 'loaded') return;//腳本沒加載好則不執(zhí)行回調(diào)函數(shù) ie瀏覽器會(huì)自動(dòng)報(bào)錯(cuò)
   this.onreadystatechange = null;//若 加載成功
   for (const cb of callbacks) {//執(zhí)行回調(diào)函數(shù)
    cb(null, script) // there is no way to catch loading errors in IE8
   }
   callbacks = null;//置空callbacks
  }
 }
}

export default dynamicLoadScript;//暴露出動(dòng)態(tài)加載腳本的方法

怎么使用呢?

在組件中引入上述代碼塊(其實(shí)就是引入那個(gè)方法)

import load from './dynamicLoadScript'

上訴路徑可以根據(jù)實(shí)際情況引入

load(tinymceCDN, (err) => {//tinymceCDN代表tinymce的CDN地址,下一個(gè)參數(shù)是回調(diào)方法
    if (err) {//若腳本加載錯(cuò)誤,這彈出錯(cuò)誤提示
     this.$message.error(err.message)
     return
    }
    this.initTinymce();//否則執(zhí)行初始化tinymce方法
   })

以上這種動(dòng)態(tài)加載腳本在vue中,個(gè)人認(rèn)為是個(gè)不錯(cuò)的實(shí)踐,可以縮小vue項(xiàng)目體積。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中使用swiper失效問題及解決

    vue中使用swiper失效問題及解決

    這篇文章主要介紹了vue中使用swiper失效問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue3+typescript實(shí)現(xiàn)圖片懶加載插件

    vue3+typescript實(shí)現(xiàn)圖片懶加載插件

    這篇文章主要介紹了vue3+typescript實(shí)現(xiàn)圖片懶加載插件,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-10-10
  • Vue利用廣度優(yōu)先搜索實(shí)現(xiàn)watch

    Vue利用廣度優(yōu)先搜索實(shí)現(xiàn)watch

    這篇文章主要為大家學(xué)習(xí)介紹了Vue如何利用廣度優(yōu)先搜索實(shí)現(xiàn)watch(有意思),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • 一文詳解Vue中nextTick的原理與作用

    一文詳解Vue中nextTick的原理與作用

    Vue的nextTick方法是用于在DOM更新后執(zhí)行回調(diào)的工具函數(shù),它的作用是在當(dāng)前JavaScript執(zhí)行環(huán)境中延遲執(zhí)行回調(diào),以確保在下次DOM更新循環(huán)之前,可以訪問到更新后的DOM,本文就給大家介紹一下Vue nextTick原理與作用,需要的朋友可以參考下
    2023-08-08
  • vue中使用echarts的示例

    vue中使用echarts的示例

    這篇文章主要介紹了vue中使用echarts的步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2021-01-01
  • vue3?實(shí)現(xiàn)右鍵菜單編輯復(fù)制粘貼功能

    vue3?實(shí)現(xiàn)右鍵菜單編輯復(fù)制粘貼功能

    在瀏覽器中,Vue3編輯器自帶默認(rèn)右鍵菜單,然而,在Electron桌面應(yīng)用中,這一功能需自行編寫代碼實(shí)現(xiàn),本文詳細(xì)介紹了如何在Vue3中手動(dòng)實(shí)現(xiàn)右鍵菜單的編輯、復(fù)制、粘貼功能,并提供了代碼示例,更多細(xì)節(jié)和相關(guān)教程可參考腳本之家的其他文章
    2024-10-10
  • Vuepress使用vue組件實(shí)現(xiàn)頁面改造

    Vuepress使用vue組件實(shí)現(xiàn)頁面改造

    這篇文章主要為大家介紹了Vuepress使用vue組件實(shí)現(xiàn)頁面改造示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue菜單欄聯(lián)動(dòng)內(nèi)容頁面tab的實(shí)現(xiàn)示例

    vue菜單欄聯(lián)動(dòng)內(nèi)容頁面tab的實(shí)現(xiàn)示例

    本文主要介紹了vue菜單欄聯(lián)動(dòng)內(nèi)容頁面tab的實(shí)現(xiàn)示例,左側(cè)菜單欄與右側(cè)內(nèi)容部分聯(lián)動(dòng),當(dāng)點(diǎn)擊左側(cè)的菜單,右側(cè)會(huì)展示對(duì)應(yīng)的tab,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Vue解決移動(dòng)端彈窗滾動(dòng)穿透問題

    Vue解決移動(dòng)端彈窗滾動(dòng)穿透問題

    這篇文章主要介紹了Vue解決移動(dòng)端彈窗滾動(dòng)穿透問題的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue使用WebSocket模擬實(shí)現(xiàn)聊天功能

    vue使用WebSocket模擬實(shí)現(xiàn)聊天功能

    這篇文章主要介紹了vue使用WebSocket模擬實(shí)現(xiàn)聊天功能,通過創(chuàng)建node服務(wù)和server.js文件實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08

最新評(píng)論