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

vue如何實現(xiàn)動態(tài)加載腳本

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

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

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

我們可以建立一個dynamicLoadScript.js文件

上代碼:dynamicLoadScript.js

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

function loadedTinymce() {//檢測腳本是否加載好的方法 如果tinymce加載好了,window對象上會有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標簽元素
 const cb = callback || function() {};//拿到回調(diào)函數(shù)

 if (!existingScript) {//若沒有這個腳本的script標簽
  const script = document.createElement('script');//創(chuàng)建一個script標簽
  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;//若是標準瀏覽器 有onload屬性 若是ie瀏覽器 沒有onload屬性
  onEnd(script)
 }

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

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

 function ieOnEnd(script) {//若是ie瀏覽器 
  script.onreadystatechange = function() {//腳本加載成功后
   if (this.readyState !== 'complete' && this.readyState !== 'loaded') return;//腳本沒加載好則不執(zhí)行回調(diào)函數(shù) ie瀏覽器會自動報錯
   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;//暴露出動態(tài)加載腳本的方法

怎么使用呢?

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

import load from './dynamicLoadScript'

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

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

以上這種動態(tài)加載腳本在vue中,個人認為是個不錯的實踐,可以縮小vue項目體積。

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

相關(guān)文章

  • 使用proxy實現(xiàn)一個更優(yōu)雅的vue【推薦】

    使用proxy實現(xiàn)一個更優(yōu)雅的vue【推薦】

    Proxy 用于修改某些操作的默認行為,等同于在語言層面做出修改,所以屬于一種“元編程”。這篇文章主要介紹了用proxy實現(xiàn)一個更優(yōu)雅的vue,需要的朋友可以參考下
    2018-06-06
  • Vue封裝的可編輯表格插件方法

    Vue封裝的可編輯表格插件方法

    今天小編就為大家分享一篇Vue封裝的可編輯表格插件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue環(huán)形進度條組件實例應(yīng)用

    vue環(huán)形進度條組件實例應(yīng)用

    在本文中我們給大家分享了關(guān)于vue環(huán)形進度條組件的使用方法以及實例代碼,需要的朋友們跟著測試下吧。
    2018-10-10
  • Vue上傳組件vue Simple Uploader的用法示例

    Vue上傳組件vue Simple Uploader的用法示例

    本篇文章主要介紹了Vue上傳組件vue Simple Uploader的用法示例,非常具有實用價值,需要的朋友可以參考下
    2017-08-08
  • 關(guān)于element中el-cascader的使用方式

    關(guān)于element中el-cascader的使用方式

    這篇文章主要介紹了關(guān)于element中el-cascader的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 解決iview打包時UglifyJs報錯的問題

    解決iview打包時UglifyJs報錯的問題

    下面小編就為大家分享一篇解決iview打包時UglifyJs報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue-router路由跳轉(zhuǎn)問題 replace

    vue-router路由跳轉(zhuǎn)問題 replace

    這篇文章主要介紹了vue-router路由跳轉(zhuǎn)問題 replace,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue中的MVVM模式使用及說明

    Vue中的MVVM模式使用及說明

    這篇文章主要介紹了Vue中的MVVM模式使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue之moment的使用方式

    vue之moment的使用方式

    這篇文章主要介紹了vue之moment的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue加入購物車判斷token添加登錄提示功能

    Vue加入購物車判斷token添加登錄提示功能

    加入購物車,是一個登錄后的用戶 才能進行的操作,所以需要進行鑒權(quán)判斷,判斷用戶token是否存在,這篇文章主要介紹了Vue加入購物車判斷token添加登錄提示,需要的朋友可以參考下
    2023-11-11

最新評論

山丹县| 大石桥市| 衡阳县| 政和县| 安化县| 绍兴县| 泸州市| 扶绥县| 上犹县| 乐昌市| 泗洪县| 西丰县| 柳林县| 灵台县| 金川县| 天水市| 滕州市| 清水河县| 三亚市| 洪江市| 阿尔山市| 腾冲县| 汕尾市| 蒲城县| 珲春市| 五峰| 秭归县| 石狮市| 湾仔区| 冕宁县| 交口县| 修武县| 漯河市| 边坝县| 嫩江县| 两当县| 丰宁| 大渡口区| 措美县| 泸定县| 黄浦区|