Vue.js(Nuxt.js)で動的に外部のjsファイルを読み込む方法になります。
Vue.js(Nuxt.js)で動的に外部のjsファイルを読み込む方法
<template>
<button @click="importScript">click</button>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
methods: {
importScript() {
const script = document.createElement('script')
script.setAttribute('src', 'https://www.youtube.com/iframe_api')
script.setAttribute('id', 'script_id')
document.head.appendChild(script)
}
}
})
</script>
上記のコードではボタンをクリックをしたら外部のjsファイルを読み込みます。
読み込んだjsファイルの関数にはwindow
でアクセスすることができます。
読み込んだjsファイルを削除する例
ページを離脱する時などに読み込んだjsファイルを削除する方法です。
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
beforeDestroy() {
const script = document.getElementById('script_id')
if (script) {
script.parentNode.removeChild(script)
}
},
methods: {
importScript() {
const script = document.createElement('script')
script.setAttribute('src', 'https://www.youtube.com/iframe_api')
script.setAttribute('id', 'script_id')
document.head.appendChild(script)
}
}
})
</script>
外部ファイルを読み込むだけならheadの中に記述すればOK
普通に外部のファイルを読み込む場合は、headの中に記述することで可能です。
<script lang="ts">
export default Vue.extend{
head() {
return {
script: [
{
src: 'https://www.youtube.com/iframe_api'
}
],
link: [
{
rel: 'stylesheet',
href: 'https://fonts.googleapis.com/css?family=Roboto'
}
]
}
}
}
</script>
下記の記事でも解説しています。