問題
最近在使用 Vue
做東西,用到釘釘掃描登錄的功能,這里需要引入遠(yuǎn)程的
js
文件,因?yàn)?nbsp;
Vue
的方式跟之前的不太一樣,又不想把文件下載到本地應(yīng)用,找了一下解決的方法,貌似都需要引入第三方的庫,最后找到了解決方案,分享之,希望對大家
學(xué)習(xí)Vue
有所幫助
。
思路
一開始的思路是在 Vue
加載完
Dom
之后( mounted
),使用 JavaScript
腳本在
body
中插入遠(yuǎn)程的腳本文件。
后來發(fā)現(xiàn)了 Vue
的 createElement
方法,簡單的封裝一個組件解決問題。
解決方法
第一版代碼(直接在操作 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',
},
},
);
},
},
},
}
//
使用在頁面中調(diào)用
終極方案
通過封裝一個組件 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
有什么問題歡迎大家指出,大家一起討論討論。
來源:
郭宇翔的博客
|