[Solution] Add External Script Tags in Vue JS component
The article is about how to add external Js script in Vue component. We will be using mounted() and two modules to add script tags in vue locally.
This article is about ways to add external script tags in the Vue JS component.
Usually, when we add scripts to our Vue application globally, we add the <script>tag in index.html in our public directory and the script will run in all the components.
However, sometimes some scripts are large and if you need to run on a specific page only, then it is recommended to add it locally.
For Nuxt JS, you can check How To Add External JS Script In Nuxt Component
So, if we need to run a script locally on a page, we have to add the file in that particular component. And Vue doesn't have a specific way to add scripts locally on a specific page/component.
So here are some of the ways which I have found googling about the problem for myself.
Hope it will help you to solve your issue too.
Solution 1: Add script tag inside your Vue component template.
This is the easy fix I have found. Just add the script into the component template. But don't forget to add, type="application/javascript" to the script tag otherwise it will show an error during the build.
<script type="application/javascript" src="https://cdn.jsdelivr.net/vue.js"></script>
However, if you have added document.write() in your script tag, then this method will not work. And you will get an error as "Failed to execute ‘write’ on ‘Document’: It isn’t possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.”
Solution 2 : Add script in mounted() method
This is another way to add an external script to a component. It is very simple and effective and all we have to do is to add the script in mounted() life-cycle hook in Vue.
Here is an example:
export default { mounted() { let Script = document.createElement("script"); Script.setAttribute("src", "https://cdn.jsdelivr.net/npm/vue/dist/vue.js"); document.head.appendChild(Script); } };
Note: It's better not to use
created()because at this stage DOM is not mounted and you will not be able to do DOM manipulations.
Solution 3: Using Vue-Meta module
Vue-meta is a vue module that you can install in your application to add metadata and script to Vue component. This makes it easy to add any script tags to the head tag in individual Vue components.
Syntax Example:
export default { { metaInfo: { script: [ { src: 'https://cdn.jsdelivr.net/vue.js', async: true, defer: true } ], } } }
Solution 4: using vue-head module
vue-head is also a module just like vue-meta, by adding it to your Vue application, you will be able to set metadata in your head tag its individual pages.
Read more about it : vue-head documentation
Code example:
export default { head: { script: [ { type: 'text/javascript', src: 'cdn/to/script.js', async: true, body: true}, // Insert in body // with shorthand { t: 'application/ld+json', i: '{ "@context": "http://schema.org" }' }, // ... ], } }
These are some of the ways that will help you to add external JS script locally into Vue component.
Related Topics:
Set URL Query Params In Vue Using Vue-Router
Related Posts
How To Add Multiple Classes in VueJS | Class Binding
Vuejs tutorial on how to add or bind multiple classes dynamically in Vuejs using v-bind directive.
Find the average of n numbers using JavaScript
Tutorial to write a JavaScript function to find the average of n numbers of items in an Array using JavaScript.
Best way - Split an array into half in Javascript
To divide an single array into half i.e into two different arrays without modifying the original array we can use Array.slice() method in JavaScript.
Merge Two Arrays and Remove Duplicates - JavaScript
Tutorial on how to merge two or more array and remove duplicates in JavaScript.
