Vue.js: crear componente a partir de una cadena
Tengo dos componentes llamados component-1 y component-2, junto con este código vue.js:
<template>
<div id="app">
<input class="input" @keyup="update()">
<div class="render"></div>
</div>
</template>
<script>
export default {
methods:{
update () {
document.querySelector(".render").innerHTML=<code><component-${
document.querySelector(".input").value
} /></code>
}
}
}
</script>
Cada vez que ejecuto el código, el componente no se renderiza. ¿Hay alguna forma de hacer que este componente se renderice?
davy.ai
Sí, hay una forma de hacer que el componente se renderice. El problema parece estar en la forma en que se genera dinámicamente la etiqueta del componente utilizando interpolación de cadenas en la plantilla literal. Aquí hay algunos pasos para solucionar el problema:
Vue.compile()
. Así es como puedes implementarlo en el métodoupdate()
:En este código, estamos compilando la etiqueta del componente generada dinámicamente y luego creando una nueva instancia de Vue con la función
render
del componente compilado. Finalmente, estamos montando esta instancia de Vue en el elemento contenedor donde queremos que se renderice el componente, que en este caso es el elemento div.render
.Con estos cambios, el componente debería renderizarse correctamente cada vez que ingreses un nombre de componente válido en el campo
input
.