Kevin Bueno
Pueden obtener una imagen al azar desde aqui
https://picsum.photos/200
George Bryant Gutiérrez Gastélum
Alaaa!!! Que chido hermano! 😁 Me sorprendí como un niño jaja😂
Nicolás Castro Barón
Excelente recurso!
Para comunicar componentes, Angular hace uso de decoradores para intercambiar información entre un componente padre hacia un componente hijo y viceversa.
Comunicando componentes
Para enviar información de padre a hijo, puedes utilizar el decorador @Input() para marcar una propiedad de una clase como punto de entrada de un dato.
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-test-name', templateUrl: './test-name.component.html', styleUrls: ['./test-name.component.less'] }) export class TestNameComponent { @Input() firstname: string; constructor() { } }
Debes importar Input desde @angular/core para poder utilizar esta directiva e indicar que la propiedad firstname es un dato que el componente padre enviará.
Podrás inicializar el componente desde su padre y pasarle los inputs que este necesite de la siguiente manera:
<app-test-name> firstname=""Platzi"" </app-test-name>
También puedes cambiar el nombre el Input especificando el nombre de la propiedad que quieras que este utilice al inicializar el componente.
... @Input('my-name') firstname: string; ...
<app-test-name> my-name=""Platzi"" </app-test-name>
Data binding en Inputs
El decorador @Input() detectará cualquier cambio en el dato y automáticamente actualizará su valor. Si ocurre algún evento en el componente padre que cambie el valor en el Input firstname, el componente hijo recibirá inmediatamente ese nuevo valor.
Input Set
Otra manera de utilizar la directiva @Input es de la siguiente manera:
@Input() set saludar(firstname: string) { console.log('Hola', firstname) };
Observa que en esta oportunidad, cada vez que se envía un valor al @Input, se ejecutará la función saludar() que recibe como parámetro el valor que se le haya enviado.
De esta manera, puedes ejecutar la lógica que necesites dentro de esta función cada vez que el valor del @Inputcambia.
Contribución creada con los aportes de Kevin Fiorentino.
Kevin Bueno
Pueden obtener una imagen al azar desde aqui
https://picsum.photos/200
George Bryant Gutiérrez Gastélum
Alaaa!!! Que chido hermano! 😁 Me sorprendí como un niño jaja😂
Nicolás Castro Barón
Excelente recurso!
Valentín Eduardo González Morales
@Input() sirve para declarar las props, para los cuates de React ;)
Juan David Varón
Héroe sin capa.
Jimmy Buriticá Londoño
Comunicación Padre - Hijo
JUAN MIGUEL PIEDRAHITA MONROY
Hijo = img
Padre = app
William Ibañez
Para los que se preguntan que hace el decorador @Input y por que es obligatorio ponerlo es por que el decorador @input indica a un componente que puede recibir un valor desde el componente padre, por eso debemos agregarle el decorador @input a la propiedad que deseamos controlar. más info en este link https://medium.com/williambastidasblog/angular-decoradores-input-y-output-70af5f43a04
David Castro
Me gustó esta clase xq es muy importante el tema del uso de Inputs.
Jose Antonio Diaz Urbano
La forma de pasar los @input al componente hijo me recuerda mucho a pasar props en React ^^
Angel Hernandez
Aqui un link por si queren usar imagenes random
https://source.unsplash.com/random
Sherlin Hernández
Buenísimo
Diego Jurado
Que bueno.. gracias por compartir!
Ivan Hilario Pacheco
Se usa el decorador @Input para enviarle información desde el componente padre hasta el componente hijo. De manera que en nuestro componente hijo tendremos que declarar la variable que queremos recibir desde el padre declarando esta de la siguiente manera:
@input() nombreVariable:string;
Por otro lado en nuestro componente padre tendremos que hacer referencia a esta variable a través del data binding y ubicando esta dentro del tag o etiqueta correspondiente a nuestro componente hijo
<componente-hijo [nombreVariable]="valor" > </componente-hijo>
Jimmy Buriticá Londoño
Daniela Stornelli
No seria que hace referencia a esa variable a través del property binding? los corchetes en una propiedad no serian un property binding?
Jose Alfredo Cano Hernandez
Hace 4 meses vi este curso hoy gracias a que conseguí un trabajo formal como front end lo estoy volviendo a ver... recomiendo verlo 2 veces ampliamente, todo me esta quedando super claro
Elber Liebermen
Conseguiste empleo gracias a la ruta de angular o solo sirvió como complementario?
Kevin Bueno
Link de default img para no tener que descargarla
https://raw.githubusercontent.com/platzi/angular-componentes/2-step/src/assets/images/default.png
Jhon Alexander Alvarez Romero
casi, pero no funciona
John Ruiz
Hola gracias, a mí me funciono. Para que se vea hay que borrar completamente la dirección HTTPS del input.
Gisela Angela Cristaldo
Hola, les dejo la documentación oficial por si quieren ver algo de teoría. Inputs
Diego Maldonado
Como puedo enviar un arreglo de datos del padre al hijo?
Diego Fernando Caviedes Camaho
seria casi igual pero de tipo array y ya si quieres manejar numeros o string se lo pasas dentro de los < > @Input() array: Array<number> = [];
Platzi Team
Fabián Ojeda
Acabo de ver que en realidad no había entendido el -ngIf :v
Walter Galdamez
Hay que ir adaptando el curso a la nueva versión de angular... es como un reto más.
marco carreño maureira
donde está el curso de fundamentos? ya llegué aquí desde otro que llamaba básico ..
Jonathan Bernal
Miguel Angel Reyes Moreno
¿Y qué le pasó a 'valor init'?
Brandon Lee Aguero Fernandez
Se sobrescribe, nada más eso. Es cómo si hubiera hecho
@Input() img: string = '';
Julian Franco
¿Esto seria lo que son las props de React?
Ariel Emiliano Acevedo Posos
Efectivamente.
Sergio Gutiérrez Dominguez
Hola, estoy enviando a un componente hijo 3 variables, y con estas me carga una grafica, pero mediante un formulario puedo cambiar los filtros, como puedo hacer que mande los nuevos valores al hijo nuevamente, ya puse ngModel, pero no se actualiza mi grafica
<app-dashed-line-chart [tarid]="tarid" [fechainicio]="fechainicio" [fechafin]="fechafin"></app-dashed-line-chart>
@Input() tarid: string = ''; @Input() fechainicio: string = ''; @Input() fechafin: string = '';
William Armando Forero Bermeo
Hola Sergio !
Para que puedas leer los nuevos valores debes implementar la interfaz de onChanges , en esta parte del ciclo de vida te permite reconocer los cambios que ha tenido las variables de entrada de tu componente
Buen resumen, solo te falto que es necesario importar el Input, así:
import { Component, OnInit, Input } from '@angular/core';
Comunicacion entre componentes
En Angular, los componentes pueden comunicarse entre sí a través de entradas y salidas.
Uso de Inputs
Las entradas, también conocidas como propiedades de entrada, son valores que se pasan desde un componente padre a un componente hijo.
Para definir una entrada en un componente hijo, debemos decorar una propiedad con el decorador @Input(). Por ejemplo:
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-child', template: '<p>{{ message }}</p>' }) export class ChildComponent { @Input() message: string; }
En este ejemplo, hemos definido una propiedad de entrada llamada message en el componente ChildComponent. Esta propiedad se puede utilizar en la plantilla del componente para mostrar un mensaje.
Para pasar un valor a una entrada en un componente hijo, podemos enlazar la propiedad de entrada con una propiedad del componente padre utilizando la sintaxis de corchetes. Por ejemplo:
<app-child [message]="Hello from parent"></app-child>
En este ejemplo, estamos enlazando la propiedad message del componente hijo con la cadena de texto "Hello from parent". Cuando se carga el componente hijo, la propiedad message tendrá el valor "Hello from parent", que se mostrará en la plantilla del componente.
Algunos trucos de l uso de Inputs
Input con nombre distinto: A veces, puede ser útil que la propiedad de entrada del componente hijo tenga un nombre diferente al de la propiedad del componente padre. En este caso, podemos usar el decorador @Input para especificar un nombre de entrada diferente al nombre de la propiedad. Por ejemplo:
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-child', template: '<p>{{ myMessage }}</p>' }) export class ChildComponent { @Input('message') myMessage: string; }
En este ejemplo, hemos definido una propiedad de entrada con el nombre message pero la propiedad del componente hijo se llama myMessage.
Input opcional: Si queremos que una propiedad de entrada sea opcional, podemos definir una propiedad de entrada con el tipo T | undefined. De esta forma, la propiedad de entrada tendrá un valor undefined si no se proporciona ningún valor. Por ejemplo:
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-child', template: '<p>{{ message }}</p>' }) export class ChildComponent { @Input() message?: string; }
En este ejemplo, la propiedad message es opcional porque se ha definido con el tipo string | undefined.
Input con valor predeterminado: Si queremos que una propiedad de entrada tenga un valor predeterminado, podemos utilizar la sintaxis de asignación de valores por defecto en el parámetro de entrada. Por ejemplo:
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-child', template: '<p>{{ message }}</p>' }) export class ChildComponent { @Input() message = 'Default message'; }
En este ejemplo, la propiedad message tiene un valor predeterminado de "Default message". Si no se proporciona ningún valor para la propiedad de entrada, se utilizará este valor predeterminado.
Inputs múltiples: A veces, puede ser necesario pasar varias propiedades desde un componente padre a un componente hijo. En este caso, podemos utilizar el operador de propagación (...) para pasar un objeto con varias propiedades como entrada. Por ejemplo:
<app-child [myInput]="{ prop1: 'value1', prop2: 'value2'}"></app-child>
En el componente hijo, podemos definir una propiedad de entrada con el nombre myInput y el tipo Record<string, unknown> para recibir un objeto con varias propiedades.
import { Component, Input } from '@angular/core'; @Component({ selector: 'app-child', template: ` <ul> <li>{{ myInput.prop1 }}</li> <li>{{ myInput.prop2 }}</li> <li>{{ myInput.prop3 }}</li> </ul> ` }) export class ChildComponent { @Input() myInput: Record<string, unknown>; }
En este ejemplo, estamos utilizando la plantilla para mostrar las tres propiedades del objeto myInput que hemos pasado desde el componente padre.