Tengo que usar dos scripts externos para las pasarelas de pago. En este momento, ambos están en el index.html
archivo. 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?
javascript
vue.js
vuejs2
vue-component
vue-router
Gijo Varghese
fuente
fuente
/public/index.html
para hacerlo?Respuestas:
Una manera simple y efectiva de resolver esto es mediante la adición de su secuencia de comandos externa a la versión
mounted()
de su componente. Te ilustraré con el script de Google Recaptcha :Fuente: https://medium.com/@lassiuosukainen/how-to-include-a-script-tag-on-a-vue-component-fe10940af9e8
fuente
created()
método no puede obtener el documento, utilicemounted()
en su lugarrecaptchaScript.async = true
antes de agregarlo a la cabeza.recaptchaScript.defer = true
puede ser también adecuado para alguienHe 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 de archivos estáticos https://www.npmjs.com/package/vue-plugin-load-script
fuente
usando webpack y vue loader puedes hacer algo como esto
espera a que se cargue el script externo antes de crear el componente, por lo que los vars de globar, etc. están disponibles en el componente
fuente
¿Está utilizando una de las plantillas de inicio de Webpack para vue ( https://github.com/vuejs-templates/webpack )? Ya viene configurado con vue-loader ( https://github.com/vuejs/vue-loader ). Si no está utilizando una plantilla de inicio, debe configurar webpack y vue-loader.
A continuación, puede guiar
import
sus scripts a los componentes relevantes (archivo único). Antes de eso, debeexport
de sus scripts lo que quiereimport
a sus componentes.Importación de ES6:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import
- http://exploringjs.com/es6/ch_modules.html
~ Editar ~
Puede importar desde estos contenedores:
- https://github.com/matfish2/vue-stripe
- https://github.com/khoanguyen96/vue-paypal-checkout
fuente
Puede usar el paquete vue-head para agregar scripts y otras etiquetas al encabezado de su componente vue.
Es tan simple como:
Mira este enlace para más ejemplos.
fuente
Si está intentando incrustar secuencias de comandos js externas en la plantilla del componente vue.js, siga a continuación:
Y Vue me mostró este error:
Las plantillas solo deben ser responsables de asignar el estado a la interfaz de usuario. Evite colocar etiquetas con efectos secundarios en sus plantillas, por ejemplo, ya que no se analizarán.
<script type="application/javascript" defer src="..."></script>
Puedes notar el
defer
atributo. Si quieres aprender más mira este video de Kylefuente
Puede cargar el script que necesita con una solución basada en promesas:
Tenga en cuenta que
this.$root
es un poco hacky y debe usar un vuex o eventHub solución para los eventos globales en su lugar.Haría lo anterior en un componente y lo usaría donde sea necesario, solo cargará el script cuando se use.
fuente
Esto puede hacerse simplemente así.
fuente
Para mantener los componentes limpios, puede usar mixins.
En su componente, importe el archivo mixto externo.
fuente
La respuesta principal de crear etiqueta en montado es buena, pero tiene algunos problemas: si cambia su enlace varias veces, repetirá crear etiqueta una y otra vez.
Así que creé un script para resolver esto, y puede eliminar la etiqueta si lo desea.
Es muy simple, pero puede ahorrarle tiempo para crearlo usted mismo.
Y puedes usarlo así:
fuente
Puede usar vue-loader y codificar sus componentes en sus propios archivos (componentes de un solo archivo). Esto le permitirá incluir scripts y css por componentes.
fuente
La solución más simple es agregar el script en el
index.html
archivo de su proyecto vueindex.html:
fuente