Skip to content

Latest commit

 

History

History
205 lines (160 loc) · 8.52 KB

File metadata and controls

205 lines (160 loc) · 8.52 KB

Vue.js Intermedio: Comunicación de Componentes

Propiedades y eventos y bases de la comunicación entre componentes.

Vue Ready LICENSE GitHub

Vue.js

Acerca de

Abordaremos los temas a nivel intermedio de Vue.js

Propiedades

Las propiedades son las variables que se le pasan al componente para instanciarlo. De esta manera podemos parametrizarlo para reutilizarlo. Pueden ser requeridas o no, además podemos tiparlas o darles un valor por defecto. También podemos validarlas para filtrar el valor asignado.

// Mis propiedades
    // Mis propiedades
    props: {
      // count: Number, podemos definirla en una sola linea o con más opciones...
      titulo: {
        type: String, // Tipo de dato
        default: 'Contador', // valor por defecto (opcional)
        required: true, // es obligatorio pasarselo (opcional)
      },
      started: {
        type: Number,
        default: 0,
        required: true,
        // Validaro es opcional
        validator(value) {
          return value >= 2
        },
      },
    },

Eventos

De la misma manera que las propiedades nos sirven para pasar valores del padre al hijo, los eventos nos sirven para pasar valores del hijo al padre. Usaremos emits para hacerlo.

// desde el componente hijo que emite el evento
// eventos que emito hay que anunciarlos
emits: ['question-response'],
  //...
  // Mandamos el evento y su parámetro, si lo hay
  this.$emit('question-response', this.answer)
// desde el padre lo recogemos, como un evento normal y lo procesamos
<Indecision @question-response="callbackQuestionResponse" />
//...
methods: {
      callbackQuestionResponse(data) {
        console.log('He recibido el evento: ', data)
      },
    },

Comunicación entre componentes

  • Padre a hijo: Usa propiedades
  • Hijo a padre: Usa eventos
  • Si la cosa se complica o hay muchos saltos, usa una store (lo veremos en conceptos avanzados)

Ciclos de vida de un componente

Saber el ciclo de vida de un componente nos ayuda a saber como usar los hooks y con ellos disparar acciones asociadas al ciclo de vida del componente. Como son beforeCreated() => created() => beforeMount() => mounted() => beforeUpdate() => updated(), beforeUnmount(), unmounted().

Para la options API que veremos más adelante, usaremos: https://vuejs.org/api/composition-api-lifecycle.html

ciclo

Elementos dependientes del estado o similar

Podemos hacer uso de ellos por ejemplo poniendo : y el valor de la propiedad que queremos usar. Por ejemplo si queremos que una imagen o texto cambie en función de una propiedad, podemos usarlo:

<img :src="image" alt="imagen" />

Estilos condicionales

Es una ampliación del anterior. En Vue.js podemos usar clases y estilos condicionales de CSS y de esta manera podemos cambiar el aspecto de un componente en función de su estado.

data() {
  return {
    isActive: true,
    hasError: false
  }
}
<div
  class="static"
  :class="{ active: isActive, 'text-danger': hasError }"
></div>
<div class="static active"></div>

Referencias a elementos del template

Podemos hacer referencias a cualquier elemento del DOM del template usando ref. De esta manera podemos acceder a él desde el script y hacer lo que queramos con él. Por ejemplo, podemos usarlo para hacer focus en un input.

<input ref="input">
this.$refs.input.focus()

Slots

Los slots nos permiten pasar un template o código html a un componente. De esta manera podemos tener un componente y nosotros pasar el aspecto que se quiera, es decir, personalizar su template.

Slots

Sin embargo, hay casos en los que podría ser útil si el contenido de un slot puede hacer uso de datos tanto del ámbito principal como del secundario. Para lograr eso, necesitamos una forma de que se pasen datos entre ambos. Son los scoped slots.

Scoped Slots

<MyComponent v-slot="slotProps">
  {{ slotProps.text }} {{ slotProps.count }}
</MyComponent>

Referencias

Ejercicios

Este tema tiene varios ejercicios, puedes realizarlos aquí

Autor

Codificado con 💖 por José Luis González Sánchez.

Twitter GitHub

Contacto

Cualquier cosa que necesites házmelo saber por si puedo ayudarte 💬.

              

¿Un café?

joseluisgs




Licencia de uso

Este repositorio y todo su contenido está licenciado bajo licencia Creative Commons, si desea saber más, vea la LICENSE. Por favor si compartes, usas o modificas este proyecto cita a su autor, y usa las mismas condiciones para su uso docente, formativo o educativo y no comercial.

Licencia de Creative Commons
JoseLuisGS by José Luis González Sánchez is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
Creado a partir de la obra en https://github.com/joseluisgs.