susanahernandezd
4/20/2020 - 9:10 AM

Components @Input / @Output

```typescript
@Input() // Definir propiedades que vienen del padre
@Input() prop: string;
```
```html
<!-- parentProp, puede es una propiedad del padre que su componente hijo podrá utilizar -->
<children-component [prop]="parentProp"><children-component>
```
```typescript
@Output() // eventos que el hijo va a emitir y el padre va a reaccionar en consecuencia
// Children component ts
---
@Output() outputWithParams: EventEmitter<any>: new EventEmitter<any>();
@Output() outputWithoutParams: EventEmitter<void>: new EventEmitter<void>();
callWithParams() { // función que dispara un botón del componente hijo
    this.outputWithParams.emit({ hello: 'world' });
}
callWithoutParams() { // función que dispara otro botón del componente hijo
    this.outputWithoutParams.emit();
}
---
```
### componentepadre
```html
<children-component 
    (outputWithParams)="parentWithParams($event)" // al disparar el componente hijo el emit de outputWithParams, hará que se ejecute la función asignada del padre
    (outputWithoutParams)="parentWithOutParams()"> // al disparar el componente hijo el emit de outputWithoutParams, hará que se ejecute la función asignada del padre
<children-component>
```
```typescript
// parent.component.ts
parentWithParams(
    dataFromChildEvent: any // en el caso del ejemplo aquí llegará { hello: 'world' }
) {
    console.log(dataFromChildEvent);
}
parentWithOutParams(
   // Como es un output void, solo nos llega que se a ejecutado un evento, sin parametros
) {
    console.log('output executed');
}