<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
問(wèn)題
最近在使用 Vue 做東西,用到釘釘掃描登錄的功能凳忙,這里需要引入遠(yuǎn)程的 js 文件业踏,因?yàn)?Vue 的方式跟之前的不太一樣,又不想把文件下載到本地應(yīng)用涧卵,找了一下解決的方法勤家,貌似都需要引入第三方的庫(kù),最后找到了解決方案柳恐,分享之伐脖。
思路
一開(kāi)始的思路是在 Vue 加載完 Dom 之后(mounted1
)热幔,使用 JavaScript 腳本在 body 中插入遠(yuǎn)程的腳本文件。
后來(lái)發(fā)現(xiàn)了 Vue 的 createElement
方法讼庇,簡(jiǎn)單的封裝一個(gè)組件解決問(wèn)題绎巨。
解決方法
第一版代碼(直接在操作 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)用
終極方案 通過(guò)封裝一個(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)閯傞_(kāi)始學(xué)習(xí) Vue 有什么問(wèn)題歡迎大家指出,大家一起討論討論蠕啄。
我最終用了第一種场勤,如下:
mounted () {
const link = document.createElement('link')
link.type = 'text/css'
link.rel = 'stylesheet'
link.
document.head.appendChild(link)
},
作者:白云v城主
鏈接:http://www.reibang.com/p/1dd19e41883a
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)歼跟,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處和媳。