要引入第三方資源,常規(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>
但是又不想影響其他頁面燕偶,只想在本頁顯示。所以網(wǎng)上搜了下创夜。我最終選擇了第一種杭跪。 —
原文鏈接:https://blog.yourtion.com/vue-require-remote-js.html
問題
最近在使用 Vue 做東西仙逻,用到釘釘掃描登錄的功能驰吓,這里需要引入遠(yuǎn)程的 js 文件,因?yàn)?Vue 的方式跟之前的不太一樣系奉,又不想把文件下載到本地應(yīng)用檬贰,找了一下解決的方法,貌似都需要引入第三方的庫缺亮,最后找到了解決方案翁涤,分享之。
思路
一開始的思路是在 Vue 加載完 Dom 之后(mounted1
),使用 JavaScript 腳本在 body 中插入遠(yuǎn)程的腳本文件葵礼。
后來發(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> 在頁面中調(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)
},