如何在vue單頁(yè)面局部引用外部js文件

<meta charset="utf-8">

要引入第三方資源,常規(guī)的做法是在index.html中引入。如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>vuetest</title>
    <link rel="stylesheet" type="text/css" > 
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

但是又不想影響其他頁(yè)面,只想在本頁(yè)顯示。所以網(wǎng)上搜了下。我最終選擇了第一種。 —

原文鏈接:https://blog.yourtion.com/vue-require-remote-js.html

問題

最近在使用 Vue 做東西,用到釘釘掃描登錄的功能,這里需要引入遠(yuǎn)程的 js 文件,因?yàn)?Vue 的方式跟之前的不太一樣,又不想把文件下載到本地應(yīng)用,找了一下解決的方法,貌似都需要引入第三方的庫(kù),最后找到了解決方案,分享之。

思路

一開始的思路是在 Vue 加載完 Dom 之后(mounted1),使用 JavaScript 腳本在 body 中插入遠(yuǎn)程的腳本文件。

后來(lái)發(fā)現(xiàn)了 Vue 的 createElement 方法,簡(jiǎn)單的封裝一個(gè)組件解決問題。

解決方法

第一版代碼(直接在操作 Dom )如下:

export default {
  mounted() {
    const s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = 'https://g.alicdn.com/dingding/dinglogin/0.0.2/ddLogin.js';
    document.body.appendChild(s);
  },
}

第二種使用 createElement 方法:

export default {
  components: {
    'dingtalk': {
      render(createElement) {
        return createElement(
          'script',
          {
            attrs: {
              type: 'text/javascript',
              src: 'https://g.alicdn.com/dingding/dinglogin/0.0.2/ddLogin.js',
            },
          },
        );
      },
    },
  },
}

// 使用 <dingtalk></dingtalk> 在頁(yè)面中調(diào)用

終極方案 通過封裝一個(gè)組件 remote-js 實(shí)現(xiàn):

export default {
  components: {
   'remote-js': {
    render(createElement) {
      return createElement('script', { attrs: { type: 'text/javascript', src: this.src }});
    },
    props: {
      src: { type: String, required: true },
    },
  },
  },
}

使用方法:

<remote-js src="https://g.alicdn.com/dingding/dinglogin/0.0.2/ddLogin.js"></remote-js>

因?yàn)閯傞_始學(xué)習(xí) Vue 有什么問題歡迎大家指出,大家一起討論討論。


我最終用了第一種,如下:

mounted () {
    const link = document.createElement('link')
    link.type = 'text/css'
    link.rel = 'stylesheet'
    link.
    document.head.appendChild(link)
  },

作者:白云v城主
鏈接:http://www.itdecent.cn/p/1dd19e41883a
來(lái)源:簡(jiǎn)書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容