- Aprender
-
Ecosistema
Ayuda
Herramientas
Librerías Oficiales
Noticias
Lista de Recursos
- Equipo
- Apoyar Vue
- Traducciones
Guía
Conocimientos Esenciales
- Instalación
- Introducción
- La instancia Vue
- Sintaxis de Template
- Propiedades Computadas y Observadores
- Enlace Clases y Estilos
- Renderización Condicional
- Renderizado de lista
- Manejo de eventos
- Binding en Formularios
- Conceptos Básicos de Componentes
Transiciones & Animaciones
- Efectos de Transición
Componentes en Profundidad
- Registro de Componente
- Propiedades
- Eventos personalizados
- Slots
- Componentes Dinámicos & Asíncronos
- Handling Edge Cases
- Transiciones de estado
Reusabilidad & Composición
- Mixins
- Directivas Personalizadas
- Funciones de renderizado & JSX
- Plugins
- Filtros
- Publicación en Producción
Herramientas
- Componentes de un Solo Archivo (Single File Components)
- Testing Unitario
- Soporte TypeScript
Escalando la Aplicación
- Enrutamiento
- Administración del Estado
- Renderizado del lado de Servidor
Funcionamiento Interno
- Reactividad en profundidad
Migraciones
- Migración desde Vue 1.x
- Migración desde Vue Router 0.7.x
- Migración de Vuex 0.6.x a 1.0
Meta Documentación
- Comparación con otros frameworks
- Únete a la comunidad Vue.js!
- Conozca al equipo
Componentes Dinámicos & Asíncronos
Esta página asume que usted ya ha leído Conceptos Básicos de Componentes. Lea eso primero si usted es nuevo con respecto a componentes.
keep-alive
con Componentes Dinámicos
Anteriormente, usamos el atributo is
para cambiar entre componentes en una interfaz con pestañas:
<component v-bind:is="currentTabComponent"></component> |
Sin embargo, al cambiar entre estos componentes, a veces querrá mantener su estado o evitar la renderización múltiple por motivos de rendimiento. Por ejemplo, al expandir nuestra interfaz con pestañas:
Notará que si selecciona una publicación, cambie a la pestaña Archivo, luego vuelva a Publicaciones, ya no se muestra la publicación que seleccionó. Esto se debe a que cada vez que cambia a una nueva pestaña, Vue crea una nueva instancia de currentTabComponent
.
La recreación de componentes dinámicos suele ser un comportamiento útil, pero en este caso, nos gustaría que esas instancias de componentes de pestañas se almacenen en caché una vez que se crean por primera vez. Para resolver este problema, podemos envolver nuestro componente dinámico con un elemento <keep-alive>
:
<!-- Inactive components will be cached! --> |
Eche un vistazo a los resultados a continuación:
Ahora la pestaña Publicaciones mantiene su estado (la publicación seleccionada) incluso cuando no está renderizada. Vea este fiddle para ver el código completo.
Tenga en cuenta que <keep-alive>
requiere que los componentes se cambien para que todos tengan nombres, ya sea utilizando la opción de nombre
en un componente o mediante el registro local/global.
Por más detalles sobre <keep-alive>
eche un vistazo a Referencia en la API.
Componentes asíncronos
En aplicaciones grandes, es posible que tengamos que dividir la aplicación en partes más pequeñas y solo cargar un componente del servidor cuando sea necesario. Para facilitarlo, Vue le permite definir su componente como una función de fábrica que resuelve de forma asíncrona su definición de componente. Vue solo activará la función de fábrica cuando el componente necesita ser procesado y almacenará el resultado en caché para futuras repeticiones. Por ejemplo:
Vue.component('async-example', function (resolve, reject) { |
Como puede ver, la función de fábrica recibe una función callback resolve
, que debe llamarse cuando haya recuperado su definición de componente del servidor. También puede llamar a reject(motivo)
para indicar que la carga ha fallado. El setTimeout
aquí es para demostración; Cómo recuperar el componente depende de usted. Un enfoque recomendado es utilizar componentes asíncronos junto con la funcionalidad de división de código de Webpack:
Vue.component('async-webpack-example', function (resolve) { |
También puedes devolver una Promesa
en la función de fábrica, así que con la sintaxis de Webpack 2 y ES2015 puede hacer:
Vue.component( |
Al usar registro local, también es posible proporcionar directamente una función que devuelva una Promesa
:
new Vue({ |
Si usted es un usuario de Browserify que quiere usar componentes asíncronos, su creador desafortunadamente dejó en claro que la carga asíncrona “no es algo que Browserify nunca apoyará.” oficialmente, al menos. La comunidad Browserify ha encontrado algunas soluciones, que pueden ser útiles para aplicaciones existentes y complejas. Para todos los demás escenarios, recomendamos el uso de Webpack para el soporte asíncrono integrado de primera clase.
Manejo del estado de carga
Nuevo en 2.3.0+
La fábrica de componentes asíncronos también puede devolver un objeto con el siguiente formato:
const AsyncComponent = () => ({ |
Observe que debe usar Vue Router 2.4.0+ si desea usar la sintaxis previa para componentes de ruta.