Esenciales Angular
Tutorial de introducción a Angular Essentials
Angular es una plataforma y un marco de aplicaciones web ampliamente utilizado creado y mantenido por Google. Sirve como una reescritura total de AngularJS y el nombre "Angular" pretende incluir todas las versiones del marco a partir de la 2 en adelante.
TypeScript es el núcleo de Angular, siendo el lenguaje en el que se escribe Angular. Como tal, Angular implementa funcionalidades principales y básicas como bibliotecas TypeScript mientras crea aplicaciones cliente con HTML adicional.
Por diversas razones, Angular ha ganado popularidad entre los desarrolladores. Es fácil de mantener con su sistema basado en clases y componentes, construcción modular, estructura jerárquica y plantillas declarativas simples. Además, sus capacidades multiplataforma son ventajosas para los desarrolladores de empresas y PYMES, incluida su velocidad de renderizado del lado del servidor.
Esta Guía rápida de conceptos básicos Angular repasará las piezas esenciales de Angular y los conceptos principales detrás del trabajo con la plataforma en constante crecimiento para aplicaciones basadas en web.
¿Cuál es la diferencia entre Angular y AngularJS?
En el pasado, es posible que haya trabajado o al menos haya oído hablar de Angular y AngularJS. Pero hay algunas diferencias principales entre Angular y AngularJS que debes conocer:
- Modularidad: más funcionalidades principales Angular se han trasladado a módulos.
- Jerarquía: Angular tiene una arquitectura construida alrededor de una jerarquía de componentes.
- Sintaxis: Angular tiene una sintaxis de expresión diferente para el enlace de eventos y propiedades.
- Carga dinámica: Angular cargará bibliotecas en la memoria en tiempo de ejecución, recuperará y ejecutará funciones y luego descargará la biblioteca de la memoria.
- Devoluciones de llamada iterativas: al utilizar RxJS, Angular facilita la redacción de código asíncrono o basado en devolución de llamada.
- Compilación de plantillas asincrónicas: Angular, sin controladores ni el concepto de "alcance", facilita la pausa en la representación de plantillas y la compilación de plantillas para generar el código definido.
Hiedra Angular
Ivy es una reescritura del motor de renderizado Angular. Con Ivy, los componentes se pueden compilar de forma independiente unos de otros. Esto mejora el tiempo de desarrollo ya que la aplicación solo recompilará los componentes que cambiaron. Si es autor de una biblioteca o de una aplicación, consulte https://docs.angular.lat/guide/ivy para obtener más detalles y recomendaciones sobre cómo lograr la compatibilidad entre un motor Angular nuevo y antiguo.
Sacudiendo el árbol
Ivy está diseñado para utilizar la vibración de árboles, lo que mejora la gestión de los componentes Angular. Garantiza que el código no utilizado no se incluya en un paquete durante el proceso de compilación, lo que da como resultado un tamaño más pequeño de la aplicación. Los paquetes más pequeños significan un tiempo de inicio más rápido. La división de código optimiza aún más los paquetes.
Localidad
Ahora cada componente puede compilar de forma independiente con su propia información local que se reconstruye significativamente más rápido porque no compila toda la aplicación Angular, sino solo aquellas cosas que se cambiaron.
Carga lenta
Con Ivy, podríamos cargar componentes de forma diferida sin necesidad de AngularNgModule. Además, los paquetes que utiliza un componente con carga diferida se agrupan en fragmentos con carga diferida.
Globalización
No es necesario registrar las configuraciones regionales en el momento de la compilación. En cambio, se pueden cargar dinámicamente en tiempo de ejecución y admitir varios idiomas con un único paquete de aplicaciones. Lo que significa que si desea cambiar el idioma, no necesita reiniciar la aplicación.
Depuración
Ivy proporciona nuevas funciones al modo de depuración y realiza mejoras en el seguimiento de la pila, lo que aporta mucha más información sobre el origen de un error.
Pruebas más rápidas
Con la nueva implementación de TestBed en Ivy, se evita la recompilación entre pruebas a menos que un componente haya sido anulado manualmente. Esto conduce a un aumento del 40 al 50 % en la velocidad de prueba.
Arquitectura Angular básica
A continuación se ofrece una breve descripción general de la arquitectura involucrada y los componentes básicos que se cubrirán en esta guía:
- NgModules: declara un contexto de compilación para un conjunto de componentes dedicado a un dominio de aplicación, un flujo de trabajo o un conjunto de capacidades relacionado.
- Componentes: define una clase que contiene lógica y datos de la aplicación y funciona con una plantilla HTML que define una vista.
- Plantilla: combina HTML con marcado Angular que puede modificar elementos HTML antes de que se muestren.
- Directiva: adjunta un comportamiento personalizado a los elementos del DOM.
- Enlace de datos bidireccional: coordina las partes de una plantilla con las partes de un componente.
- Servicios: normalmente, una clase utilizada para aumentar la modularidad y la reutilización con un propósito limitado y bien definido.
- Inyección de dependencia: proporciona componentes con los servicios necesarios y da acceso a una clase de servicio.
- Enrutamiento: facilita la implementación de la navegación dentro de la aplicación.
Este diagrama representa mejor la relación entre los bloques de construcción:
Configurar el entorno de desarrollo Angular
Para configurar el entorno, debe comenzar descargando Angular con la herramienta Angular CLI. Si tiene una máquina que no tiene Node.js y npm instalados, asegúrese de descargarlos e instalarlos aquí. Luego, ejecutará una instalación global de Angular CLI:
instalación npm --g @angular/cli
NgModule en Angular
Hemos llegado a la siguiente pregunta “¿Qué es NgModule en Angular”? Básicamente, NgModule en Angular es una clase marcada por el decorador @NgModule. Los NgModules son excelentes para organizar elementos relacionados y funcionan para configurar tanto el inyector como el compilador.
Este decorador tiene información sobre cómo compilar la plantilla de un componente y cómo crear un inyector en tiempo de ejecución, todo dentro de un objeto de metadatos. Como puede adivinar, @NgModule sirve para identificar y cerrar la brecha entre sus propias directivas, componentes, tuberías y componentes externos que dependen de estas piezas.
Este decorador tenía información sobre cómo compilar la plantilla de un componente y cómo crear un inyector en tiempo de ejecución, todo dentro de un objeto de metadatos. Como puedes adivinar, @NgModule sirve para identificar y cerrar la brecha entre sus propias directivas, componentes y tuberías, y los componentes externos que dependen de estas piezas.
La propiedad exports también hace pública parte de la composición del módulo, asegurando que los componentes externos puedan usarla efectivamente.
Como último paso, @NgModule también agrega proveedores de servicios a los inyectores de dependencia de la aplicación, lo que básicamente hace que la aplicación sea más adaptable.
Directivas Angular: tipos y ejemplos
Las directivas crean elementos DOM y cambian su estructura o comportamiento en una aplicación Angular. Hay tres tipos de directivas en Angular:
- Componentes - Directivas con plantillas.
- Directivas de atributos: cambia la apariencia y el comportamiento de un elemento, componente u otra directiva.
- Directivas estructurales: cambie el diseño DOM agregando o eliminando elementos.
Componentes
En las aplicaciones Angular, lo que ves en el navegador (o en cualquier otro lugar) es un componente. Un componente consta de las siguientes partes:
- Una clase de TypeScript llamada clase Componente
- Un archivo HTML llamado plantilla del componente.
- Un archivo CSS opcional para el estilo del componente.
- Una clase para contener datos y la lógica.
- Plantilla HTML y estilos para mostrar datos en la aplicación. También se denomina vista y es visto por el usuario en la pantalla para interactuar.
- Metadatos que definen el comportamiento de un componente. Los metadatos del componente se aplican a la clase mediante el decorador @Component. Se pueden pasar diferentes comportamientos del componente como propiedades del objeto, que es un parámetro de entrada del decorador @Component.
Un componente es un tipo de directiva con su propia plantilla. Todo lo que ves en una aplicación Angular es un componente.
Metadatos de componentes
El decorador @Component decora una clase como componente. Es una función que toma un objeto como parámetro. En el decorador @Component, podemos establecer los valores de diferentes propiedades para establecer el comportamiento del componente. Las propiedades más utilizadas son las siguientes:
- plantilla
- URL de plantilla
- Proveedores
- estilos
- estiloURL
- selector
- encapsulación
- cambioDetección
- animaciones
- verProveedores
Aparte de las mencionadas anteriormente, también existen algunas otras propiedades importantes. Veámoslos uno por uno.
Detección de cambio Angular
Para responder rápidamente a la pregunta "¿qué es la detección de cambios en Angular", digamos que es el proceso mediante el cual Angular verifica si el estado de su aplicación se modifica y si algún DOM necesita actualizarse más. Esta propiedad determina cómo funcionará el detector de cambios para el componente. Establecemos la ChangeDetectionStrategy del componente en la propiedad. Hay dos valores posibles:
- Por defecto
- Al empujar
Cubriremos esta propiedad en detalle en secciones posteriores.
Encapsulación
Esta propiedad determina si Angular creará un DOM oculto para un componente. Determina el modo ViewEncapsulation del componente. Hay cuatro valores posibles:
- Emulado (este es el valor predeterminado)
- Nativo
- Ninguno
- SombraDom
Usando un componente
Un componente se puede utilizar dentro de una aplicación Angular de varias maneras:
- Como componente raíz.
- Como componente secundario. Podemos usar un componente dentro de otro Componente.
- Navegue hasta un componente mediante enrutamiento. En este caso, el componente se cargará en RouterOutlet.
- Cargando componentes dinámicamente usando ComponentFactoryResolver.
El componente debe ser parte de un módulo. Para usar un componente en un módulo, primero impórtelo y luego páselo a la matriz de declaración del módulo.
@NgModule({
declaraciones: [
componente de aplicación,
Componente del producto
]
})
Componentes independientes
Con el lanzamiento de Angular 14, podemos crear componentes independientes y no es necesario declararlos en un NgModule. Administran sus propias dependencias y pueden importar directamente otro componente independiente.
Puede crear un componente independiente con:
ng gc {nombre del componente} --independiente
Si desea utilizar otros componentes, directivas o canalizaciones en una plantilla independiente, al configurar el indicador "independiente" puede importar lo que se necesita directamente al componente independiente.
importar {Componente, OnInit} desde '@angular/core';
importar {CommonModule} desde '@angular/common';
@Componente({
selector: 'app-card', independiente: verdadero, importaciones: [CommonModule], templateUrl: './card.component.html', styleUrls: ['./card.component.css']})
la clase de exportación CardComponent implementa OnInit {
constructor() {} ngOnInit(): vacío {}}
Los componentes independientes pueden aprovechar al máximo el ecosistema Angular.
Angular nos ha proporcionado muchas directivas estructurales y de atributos incorporadas. Las directivas estructurales incorporadas son *ngFor y *ngIf. Las directivas de atributos son NgStyle y NgModel.
Uso de directivas estructurales Angular
*ngIf es una directiva de estructura utilizada para proporcionar una condición "si" a las declaraciones que se ejecutarán. Si la expresión se evalúa como un valor Falso, los elementos se eliminan del DOM. Si se evalúa como Verdadero, el elemento se agrega al DOM. Considere la siguiente lista. En esto, la directiva *ngIf agregará div en DOM si el valor de la propiedad showMessage es True.
@Componente({
Selector: 'app-message', Plantilla: ` < div *ngIf=”showMessage” >Mostrar mensaje </div> `})
exportar clase AppMessageComponent { showMessage = true; }
Tenga en cuenta que *ngIf no oculta ni muestra un elemento DOM. Más bien, agrega o elimina según la condición. La directiva de estructura *ngFor crea elementos DOM en un bucle. Considere la siguiente lista. En esto, la directiva *ngFor agregará filas en una tabla con el número de elementos en la matriz de datos.
@Componente({
Selector: 'mensaje de aplicación', Plantilla: ` <table> <tr *ngFor='let f of data'> <td>{{f.name}}</td> </tr> </table> `} )
clase de exportación AppMessageComponent {datos = [{nombre: 'foo'}, {nombre: 'koo'}]; }
En la mayoría de los casos, no será necesario crear directivas estructurales personalizadas; Las directivas incorporadas deberían ser suficientes.
Directiva de imagen Angular
La directiva de imagen se lanzó para vista previa del desarrollador en la versión 14.2 de Angular y es parte de una versión estable de 15.0. La directiva NgOptimizedImage optimiza la carga de imágenes, lo que puede mejorar significativamente el LCP. Prioriza la carga de imágenes críticas, carga de forma diferida imágenes que no son prioritarias de forma predeterminada y establece automáticamente el atributo fetchpriority en eletiqueta. Además, tiene una advertencia incorporada para garantizar que el código siga las mejores prácticas. Sus propiedades disponibles son:
- ngSrc: contiene el nombre de la imagen que será procesada por el cargador y aplicada a la propiedad src.
- ngSrcset: contiene una lista de descriptores de ancho y densidad
- Ancho: el ancho de la imagen en píxeles.
- Altura: la altura de la imagen en píxeles.
- Cargando: define el tipo, puede ser perezoso, ansioso o automático.
- Prioridad: indica si la imagen debe cargarse con alta prioridad.
NgOptimizedImage es una directiva independiente y se puede importar directamente al componente o al ngModule necesario.
importar {NgOptimizedImage} desde '@angular/common';
// Ejemplo con un componente no independiente
@NgModule({
importaciones: [NgOptimizedImage],})
clase AppModule {}
// Ejemplo con componente independiente
@Componente({
independiente: importaciones verdaderas: [NgOptimizedImage],})
clase Componente independiente {}
¿Qué es el enlace de datos en Angular?
El enlace de datos determina cómo fluyen los datos entre la clase de componente y una plantilla de componente. Esto se utiliza como una técnica que vincula datos a la capa de vista. El enlace de datos en Angular es fácil y, a diferencia de WPF, no tiene que preocuparse por el contexto de los datos, el modelo de vista o INotifyPropertyChanged (INPC). Lo único que necesita es un archivo HTML y un archivo mecanografiado.
Angular nos proporciona tres tipos de enlaces de datos:
- Interpolación
- Vinculación de propiedad
- Enlace de eventos
¿Qué es la interpolación en Angular?
La interpolación Angular es un enlace de datos unidireccional. Se utiliza para pasar datos de la clase de componente a la plantilla. La sintaxis de interpolación es {{propertyname}}.
Digamos que tenemos la clase de componente como se muestra a continuación:
clase de exportación AppComponent {producto = { título: 'Bate de críquet', precio: 500 };}
Debemos pasar el producto de la clase de componente a la plantilla. Tenga en cuenta que para simplificar el ejemplo, codificaremos el valor del objeto del producto. Sin embargo, en un escenario real, los datos podrían recuperarse de la base de datos mediante la API. Podemos mostrar el valor del objeto del producto mediante interpolación, como se muestra en el siguiente listado:
<h1>Producto</h1>
<h2>Título: {{product.title}}</h2>
<h2>Precio: {{product.price}}</h2>
Mediante la interpolación, los datos se pasan de la clase de componente a la plantilla. Idealmente, cada vez que se cambia el valor del objeto del producto, la plantilla se actualizará con el valor actualizado del objeto del producto.
En Angular, hay algo llamado servicio de detector de cambios. Garantiza que el valor de la propiedad en la clase de componente y la plantilla estén sincronizados entre sí.
Por lo tanto, si desea mostrar datos en Angular, debe utilizar el enlace de datos de interpolación.
Vinculación de propiedad
Angular le proporciona otro tipo de enlace, llamado enlace de propiedad. La sintaxis de un enlace de propiedad es el corchete: []. Permite configurar la propiedad de elementos HTML en una plantilla con la propiedad de la clase de componente.
Entonces, digamos que tiene una clase de componente como la siguiente:
exportar clase AppComponent {
btnAltura = 100; btnAncho = 100;}
Ahora, puede establecer las propiedades de alto y ancho de un botón en una plantilla con las propiedades de la clase de componente mediante el enlace de propiedades.
<button [style.height.px] = 'btnHeight' [style.width.px] = 'btnWidth' >Agregar producto</button>
El enlace de propiedad Angular se utiliza para establecer la propiedad de los elementos HTML con las propiedades de la clase de componente. También puede establecer propiedades de otros elementos HTML como imagen, lista, tabla, etc. Siempre que cambie el valor de la propiedad en la clase de componente, la propiedad del elemento HTML se actualizará en el enlace de propiedad.
Enlace de eventos
Angular le proporciona un tercer tipo de enlace para capturar eventos generados en plantillas en una clase de componente. Por ejemplo, hay un botón en la plantilla del componente que le permite llamar a una función en la clase del componente. Puedes hacer esto usando el enlace de eventos. La sintaxis detrás del enlace de eventos es (nombre del evento).
Para este enlace de eventos en el ejemplo Angular, es posible que tenga una clase de componente como esta:
exportar clase AppComponent {
addProduct() { console.log('agregar producto'); }}
Desea llamar a la función addProduct con solo hacer clic en un botón en la plantilla. Puedes hacer esto usando el enlace de eventos:
<h1>Producto</h1>
<Button (click)='addProduct()'>Agregar Producto</button>
Angular te ofrece estos tres enlaces. En el enlace de eventos, los datos fluyen de la plantilla a la clase y en el enlace de propiedades y la interpolación, los datos fluyen de la clase a la plantilla.
Angular no tiene un enlace de datos bidireccional incorporado. Sin embargo, al combinar el enlace de propiedades y el enlace de eventos, se puede lograr un enlace de datos bidireccional.
Angular nos proporciona una directiva, ngModel, para lograr el enlace de datos bidireccional, y es muy fácil de usar. Primero, importe FormsModule y luego podrá crear un enlace de datos bidireccional:
exportar clase AppComponent {
nombre = 'foo';}
Podemos hacer un enlace de datos bidireccional para la propiedad de nombre con un cuadro de entrada:
<input type="text" [(ngModel)]='nombre' /> <h2>{{nombre}}</h2>
Como puede ver, estamos usando [(ngModel)] para crear un enlace de datos bidireccional entre el control de entrada y la propiedad de nombre. Siempre que un usuario cambie el valor del cuadro de entrada, la propiedad del nombre se actualizará y viceversa.
Tubería
Las canalizaciones son funciones que se utilizan en plantillas para transformar datos. Angular nos proporciona un conjunto de tuberías integradas que se pueden utilizar en cualquier plantilla.
DatePipe formatea la fecha en una cadena:
<p>Fecha de inicio: {{valor | fecha: 'dd/MM/aaaa'}}</p>
PercentagePipe convierte el valor en porcentaje:
valor = 0,2;
…
<p>Porcentaje: {{valor | porcentaje}}</p> // 20%
Minúsculas y mayúsculas transforman la mayúscula de una cadena:
<p>Texto en minúscula: {{valor | minúscula}}</p>
<p>Texto en mayúsculas: {{valor | mayúscula}}</p>
Crear una tubería personalizada
Es posible que necesitemos una transformación específica que no esté integrada, luego podemos crear una personalizada. Debemos crear una clase que implemente la clase PipeTransform y nuestra lógica debe ubicarse en el método de transformación.
importar {Tubería, PipeTransform} desde '@angular/core';
@Tubo({
nombre: 'mayúscula'})
clase de exportación CapitalizePipe implementa PipeTransform {
transformación pública (texto: cadena): cadena { return texto[0].toUpperCase() + text.slice(1); }}
Luego para usarlo, debemos registrarlo en las declaraciones de nuestro módulo.
Comunicación de componentes
En Angular, los componentes se comunican entre sí para compartir datos como objetos, cadenas, números, matrices o HTML.
Para comprender la comunicación de componentes, primero debemos comprender la relación entre componentes. Por ejemplo, cuando dos componentes no están relacionados entre sí, se comunican a través de un servicio Angular.
Cuando utiliza un componente dentro de otro componente, crea una jerarquía de componentes. El componente Angular que se utiliza dentro de otro componente se conoce como componente secundario y el componente adjunto se conoce como componente principal. Como se muestra en la imagen a continuación, en el contexto de AppComponent, app-child es un componente secundario y AppComponent es un componente principal.
importar {Componente} desde '@angular/core';
@Componente({
selector: 'app-root', plantilla: ` <h1>Hola {{message}}</h1> <app-child></app-child> //componente secundario `}) clase de exportación AppComponent { //componente principal mensaje = 'Soy padre';}
Los componentes padre e hijo pueden comunicarse entre sí de las siguientes maneras:
- @Aporte()
- @Producción()
- Variable de referencia de temperatura
- VerNiño
- ContenidoNiño
Cuando los componentes no están relacionados entre sí, se comunican mediante servicios. En caso contrario, se comunican mediante una de las diversas opciones en función de los criterios de comunicación. Exploremos todas las opciones una por una.
@APORTE
Puede pasar datos de un componente principal a un componente secundario utilizando el decorador @Input. Los datos pueden tener cualquier forma, como cadena, número, objeto, matriz, etc. del tipo primitivo.
Para comprender el uso de @Input, creemos un componente:
importar {Componente} desde '@angular/core';
@Componente({
selector: 'app-child', plantilla: `<h2> Hola {{greetMessage}}</h2>`})
exportar clase AppChildComponent {
greetMessage = 'Soy un niño';}
AppComponent utiliza AppChildComponent, por lo que AppComponent es el componente principal y AppChildComponent es el componente secundario. Para pasar datos, el decorador @Input utiliza las propiedades del componente secundario. Para hacer esto, necesitaremos modificar el componente secundario AppChildComponent como se muestra en la siguiente lista:
importar {Componente, Entrada, OnInit} desde '@angular/core';
@Componente({
selector: 'app-child', plantilla: `<h2> Hola {{greetMessage}}</h2>`})
la clase de exportación AppChildComponent implementa OnInit {
@Input() saludarMensaje: cadena; constructor() { } ngOnInit() { }}
Como habrás notado, hemos modificado la propiedad greetMessage con el decorador @Input(). Básicamente, en el componente secundario, hemos decorado la propiedad greetMessage con el decorador @Input() para que el valor de la propiedad greetMessage se pueda establecer desde el componente principal. A continuación, modifiquemos el componente principal AppComponent para pasar datos al componente secundario.
importar {Componente} desde '@angular/core';
@Componente({
selector: 'app-root', plantilla: ` <h2>Hola {{message}}</h2>`})
exportar clase AppComponent {
mensaje = 'Soy padre'; childmessage = 'Pasé del componente padre al hijo';}
Desde el componente principal, estamos configurando el valor de la propiedad greetMessage del componente secundario. Para pasar un valor al componente secundario, debemos pasar la propiedad del componente secundario dentro de un corchete y establecer su valor en cualquier propiedad del componente principal. Estamos pasando el valor de la propiedad childmessage del componente principal a la propiedad greetMessage del componente secundario.
@PRODUCCIÓN
Puede emitir el evento desde el componente secundario al componente principal utilizando el decorador @Output.
Variable de referencia de temperatura
Vea cómo podemos usar el enlace de eventos para lograr un enlace bidireccional en Angular. Usamos @Output para emitir un evento a otro componente. Modifiquemos AppChildComponent como se muestra en el listado a continuación:
importar {Componente, Entrada, EventEmitter, Salida} desde '@ angular/core';
@Componente({
selector: 'app-child', plantilla: `<button (click)=”handleClick()”>Haz clic en mí</button> `})
exportar clase AppChildComponent {
handleClick() { console.log('oye, me hicieron clic en niño'); }}
Hay un botón en la plantilla AppChildComponent que llama a la función handleClick. Usemos el componente secundario de la aplicación dentro de AppComponent como se muestra en la siguiente lista:
importar {Componente, OnInit} desde '@angular/core';
@Componente({
selector: 'raíz de aplicación', plantilla: ``})
la clase de exportación AppComponent implementa OnInit {ngOnInit() { }}
Aquí, estamos usando AppChildComponent dentro de AppComponent. De este modo, se crea una relación de tipo padre/hijo en la que AppComponent es el padre y AppChildComponent es el hijo. Cuando ejecutamos la aplicación, veremos este mensaje en la consola del navegador:
Hasta ahora, es bastante sencillo utilizar el enlace de eventos para hacer que el botón llame a la función en el componente. Ahora, modifiquemos un poco el requisito. ¿Qué sucede si desea ejecutar una función de AppComponent en el evento de clic de un botón dentro de AppChildComponent?
Para hacer esto, debe emitir el evento de clic en el botón desde AppChildComponent. Importe EventEmitter y salida desde @angular/core.
Aquí, vamos a emitir un evento y pasarle un parámetro. Modifique AppChildComponent como se muestra en la siguiente lista de códigos:
importar {Componente, EventEmitter, Salida} desde '@angular core';
@Componente({
selector: 'app-child', plantilla: `<button (click)=”valueChanged()”>Haz clic en mí</button>`})
exportar clase AppChildComponent {
@Output() valueChange = nuevo EventEmitter(); contador = 0; valueChanged() { este.contador = este.contador + 1; this.valueChange.emit(este.contador); }}
Realizamos las siguientes tareas en la clase AppChildComponent:
- Creó una variable llamada contador que se pasará como parámetro del evento emitido.
- Creó un cambio de valor de EventEmitter que se emitirá al componente principal.
- Creó una función llamada valueChanged(). Esta función se llama en el evento de clic del botón y, dentro de la función, se emite el evento valueChange.
- Al emitir el evento valueChange, el valor del contador se pasa como parámetro. En el componente principal AppComponent, el componente secundario AppChildComponent se puede utilizar como se muestra en la siguiente lista:
importar {Componente, OnInit} desde '@angular/core';
@Componente({
selector: 'raíz de aplicación', plantilla: ` <app-child (valueChange)='displayCounter($event)'> `})
la clase de exportación AppComponent implementa OnInit {
ngOnInit() { } displayCounter(recuento) { console.log(recuento); }}
En este momento, estamos realizando las siguientes tareas en la clase AppComponent:
- Usando <app-child> en la plantilla.
- En el elemento <app-child>, use el enlace de eventos para usar el evento valueChange.
- Llamar a la función displayCounter en el evento valueChange.
- En la función displayCounter, se imprime el valor del contador pasado desde AppChildComponent.
Como puede ver, la función de AppComponent se llama al evento de clic del botón colocado en AppChildComponent. Esto se puede hacer con @Output y EventEmitter. Cuando ejecuta la aplicación y hace clic en el botón, puede ver el valor del contador en la consola del navegador. Cada vez que haces clic en el botón, el valor del contador aumenta en 1.
Sigue leyendo
Rellena el formulario para seguir leyendo.