Unfortunately, no, you can’t add a <script>
tag to a specific component via template.
In your case you have some options:
1: Use NPM
Propertly install the dependency using npm
- Pros: proper usage of NPM and Webpack; scoped definition;
- Cons: the script must be available as a NPM package.
- Note: when available this is the recommended approach.
-
Steps:
-
For your case, you can check in
datatables
official page they do have a NPM package. I could be used like:npm install --save datatables.net-dt
-
And in your .vue file:
<script> require( 'datatables.net-dt' )(); export default { name: 'Index', data() { return { } } } </script>
-
2: Add <script>
tag to index.html
Locate and a dd the <script>
tag to your index.html
- Pros: the
<script>
tag is clearly (and declaratively) added to the HTML source. The script will only be loaded once. - Cons: the script will be globally loaded.
- Steps:
- Just add the
<script type="text/javascript" src="https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"></script>
to the end of theindex.html
file, preferably right before</body>
.
- Just add the
3: Create the <script>
tag programatically
The other alternative is to create the script
tag programatically at the component, when the component is lodaded.
- Pros: the code stays in the component only. Your external script will be loaded only when the component is loaded.
- Cons: the script still will be globally available once it is loaded.
-
Steps/Code:
<script> export default { name: 'Index', data() { return { } }, mounted() { if (document.getElementById('my-datatable')) return; // was already loaded var scriptTag = document.createElement("script"); scriptTag.src = "https://cdn.datatables.net/v/dt/dt-1.10.16/sl-1.2.5/datatables.min.js"; scriptTag.id = "my-datatable"; document.getElementsByTagName('head')[0].appendChild(scriptTag); } } </script>