Tengo que usar dos scripts externos para las pasarelas de pago.
En este momento, ambos se colocan en el archivo index.html .
Sin embargo, no quiero cargar estos archivos al principio.
La pasarela de pago solo se necesita cuando el usuario abre un componente específico ( using router-view ).
¿Hay alguna forma de lograr esto?
Gracias.
Una forma simple y efectiva de resolver esto es agregar su script externo en el vuemounted mounted() de su componente. Te ilustraré con el script de Google Recaptcha :
<template> .... your HTML </template> <script> export default { data: () => ({ ......data of your component }), mounted() { let recaptchaScript = document.createElement('script') recaptchaScript.setAttribute('src', 'https://www.google.com/recaptcha/api.js') document.head.appendChild(recaptchaScript) }, methods: { ......methods of your component } } </script>Fuente: https://medium.com/@lassiuosukainen/how-to-include-a-script-tag-on-a-vue-component-fe10940af9e8
He descargado una plantilla HTML que viene con archivos js personalizados y jquery. Tuve que adjuntar esos js a mi aplicación. y continuar con Vue.
Encontré este complemento, es una forma limpia de agregar scripts externos tanto a través de CDN como desde archivos estáticos https://www.npmjs.com/package/vue-plugin-load-script
// local files // you have to put your scripts into the public folder. // that way webpack simply copy these files as it is. Vue.loadScript("/js/jquery-2.2.4.min.js") // cdn Vue.loadScript("https://maps.googleapis.com/maps/api/js")usando webpack y vue loader puedes hacer algo como esto
espera a que se cargue la secuencia de comandos externa antes de crear el componente, por lo que las variables globales, etc., están disponibles en el componente
components: { SomeComponent: () => { return new Promise((resolve, reject) => { let script = document.createElement('script') script.onload = () => { resolve(import(someComponent)) } script.async = true script.src = 'https://maps.googleapis.com/maps/api/js?key=APIKEY&libraries=places' document.head.appendChild(script) }) } },