ccc

Mostrando entradas con la etiqueta Componentes. Mostrar todas las entradas
Mostrando entradas con la etiqueta Componentes. Mostrar todas las entradas

Pasar parámetros de componentes hijos al Padre con output

Crear un nuevo componente hijo (propiedades-extras) y en propiedades-extras.component.ts:
import { Component, EventEmitter, OnInit, Output } from '@angular/core';
...
@Output() propExtras = new EventEmitter<string>();

addPropExtras(value: string) {
   this.propExtras.emit(value);
}

En propiedades-extras.component.html:
Añadir Propiedad nueva: <input type="text" #newProp>
  
<button type="button" (click)="addPropExtras(newProp.value)" class="btn btn-primary"> Añadir nueva propiedad</button>

Ahora en el componente padre que va a recibir los datos en el ts (list-empleados.component.ts):
arrProp = [''];
addProp(newProp: string) {
   this.arrProp.push(newProp);
}
Y en el html del componente padre:
<ul>
   <li *ngFor="let prop of arrProp">{{prop}}</li>
</ul>

Más información en: https://angular.io/guide/inputs-outputs

Pasar parámetros de componentes padres a hijo con input

HTML del componente padre: <!-- se ponen entre corchetes las variables q se pasan al empleado hijo-->
<app-list-empleados *ngFor="let empleado of arrEmpleados; let i=index" [empleadoAux]="empleado" [indice]="i">
</app-list-empleados>

En app\list-empleados\list-empleados.component.ts dentro de la clase:
/* especificar en el Input los parámetros q se pasan desde el componente padre */
@Input() empleadoAux:Empleado;
@Input() indice:number;

En html de app\list-empleados\list-empleados.component.html:
{{ indice+1 }} {{ empleadoAux.nombre }}

Inciso: Normalmente el Visual Studio Code te añade automáticamente las librerías de Input y de los modelos a usar según lo has escrito pero si no fuera así hay que poner en el list-empleados.component.ts:
import { Component, Input, OnInit } from '@angular/core';
import { Empleado } from '../empleado.model';

Interpolación

Es la creación de variables y métodos para luego ser usados en el HTML, por ejemplo en el empleado.component.ts:
nombre="pepe";
edad=33;

getEdad() {
return this.edad;
}

y en el HTML:
Edad del empleado: {{ edad }}
Edad del empleado: {{ edad<18 ? "Es menor de edad": "Es mayor de edad" }}
La edad es {{ getEdad() }}

Otro ejemplo:
Empresa del empleado: {{ empresa.value }}
...
<!-- #empresa es como si fuera id="empresa" -->
<!-- Los eventos entre paréntesis -->
<input type="text" #empresa (keyup)="0">

Crear un componente

Si lo creamos de forma manual:
1. Desde Visual Studio Code crear en la carpeta App una subcarpeta (por ej: empleados)
2. Y dentro de esta subcarpeta crear el ficheros de:
empleados.component.ts
Y dentro de este fichero especificar su selector, su fichero HTML y su CSS:
import { Component } from "@angular/core";

@Component({
selector: "app-empleados",
templateUrl: "./empleados.component.html",
styleUrls: ['./empleados.component.css']
})

export class EmpleadosComponent{

}

Crear el fichero HTML: empleados.component.html
<h1>Hola mundo está en el html de empleados</h1>

Crear el fichero CSS: empleados.component.css

Una vez creado todo hay que registrar esta nueva App por lo que en app.module.ts y en declarations añadir EmpleadosComponent

Y ya simplemente añadir este nuevo componente al HTMl principal de app.component.html por ejemplo: <br><br>
<app-empleados></app-empleados>

Para crear un componente de forma automática (mucho más rápido y sencillo):
ng g c empleado
INCISO: Si desde la consola de Visual Studio Code te sale el error de "porque la ejecución de scripts está deshabilitada en este sistema" entonces seguir los pasos que indica en:
https://www.cdmon.com/es/blog/la-ejecucion-de-scripts-esta-deshabilitada-en-este-sistema-te-contamos-como-actuar

Y ya para utilizar este componente creado dentro del otro componente es irse al HTML del primero empleados.component.html:
...
<app-empleado></app-empleado>
<app-empleado></app-empleado>
<app-empleado></app-empleado>

Si quisieramos crear un componente cuyos css y html quieres que vayan inline (y no en un fichero externo como es habitual):
ng g c loquesea -s -t
Pero no es nada aconsejable que sea inline (lo correcto es siempre todo en su correspondiente fichero CSS y HTML).