要引入第三方資源,常規(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)
},