Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Creación de Directivas Personalizadas en Angular | Mastering Angular Directives and Pipes
Introducción a Angular

bookCreación de Directivas Personalizadas en Angular

Angular incluye un conjunto de directivas integradas como ngIf, ngFor y ngClass. Sin embargo, también es posible crear directivas personalizadas para gestionar tareas específicas en tu aplicación. A continuación, se muestra cómo construir una con un ejemplo práctico.

Generar la directiva personalizada

Primero, es recomendable organizar el código creando una carpeta dedicada para las directivas. Llamémosla directives.

Este comando crea una nueva carpeta llamada directives dentro del directorio app y agrega el nuevo archivo de la directiva en su interior:

  • highlight-on-complete.directive.ts – contiene la lógica de la directiva;

  • highlight-on-complete.directive.spec.ts – archivo de pruebas unitarias (puede eliminarse si no es necesario).

A continuación se muestra la estructura básica de la directiva:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definir la Función de la Directiva

Esta directiva resaltará un elemento de tarea en verde si está marcado como completado. De lo contrario, eliminará los estilos.

Para indicar a Angular que esta clase es una directiva, la decoramos con @Directive:

@Directive({
  selector: '[appHighlightOnComplete]'
})

El selector [appHighlightOnComplete] significa que la directiva se usará como un atributo, no como una etiqueta ni como una directiva estructural.

En tu HTML, la aplicarás así:

<div [appHighlightOnComplete]="task.completed"></div>

Hacer que la Directiva Reaccione a los Cambios

Para detectar cambios en la entrada completed, implementamos la interfaz OnChanges:

highlight-on-complete.ts

highlight-on-complete.ts

copy

También definimos una propiedad de entrada para recibir el valor desde el componente:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Qué hace esto:

  • Informa a Angular que el valor será proporcionado desde la plantilla (anteriormente, pasamos task.complete desde la plantilla);

  • Vincula la propiedad interna completed de la directiva al valor pasado desde la plantilla;

  • Establece un valor predeterminado de true (que será sobrescrito una vez que se reciba el dato real).

Acceso seguro al DOM

Angular utiliza la inyección de dependencias para proporcionar acceso al DOM y a las herramientas de renderizado.

En el constructor, inyectamos:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef nos proporciona una referencia al elemento DOM anfitrión. Renderer2 nos permite modificar de forma segura los estilos y atributos sin manipular directamente el DOM.

Reacción a cambios con ngOnChanges

Ahora implementemos la lógica principal en ngOnChanges, que se ejecuta cada vez que cambia el valor de entrada.

Implementación completa:

highlight-on-complete.ts

highlight-on-complete.ts

copy

El método ngOnChanges se activa cada vez que Angular detecta cambios en las propiedades de entrada de la directiva.

En este caso, responde a las actualizaciones del valor completed pasado desde la plantilla. Si completed es true, la directiva añade un borde verde y un fondo verde claro al elemento. Si es false, esos estilos se eliminan, devolviendo el elemento a su apariencia original. Esto proporciona una indicación visual de las tareas completadas.

Esta directiva personalizada permite encapsular el comportamiento de estilos de manera reutilizable y limpia. Ahora puedes aplicarla a cualquier elemento de tu aplicación, sin duplicar la lógica en los componentes. Es un excelente ejemplo de cómo el sistema de directivas de Angular puede ayudarte a escribir código más modular y mantenible.

question mark

¿Qué hace la directiva highlight-on-complete?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

bookCreación de Directivas Personalizadas en Angular

Angular incluye un conjunto de directivas integradas como ngIf, ngFor y ngClass. Sin embargo, también es posible crear directivas personalizadas para gestionar tareas específicas en tu aplicación. A continuación, se muestra cómo construir una con un ejemplo práctico.

Generar la directiva personalizada

Primero, es recomendable organizar el código creando una carpeta dedicada para las directivas. Llamémosla directives.

Este comando crea una nueva carpeta llamada directives dentro del directorio app y agrega el nuevo archivo de la directiva en su interior:

  • highlight-on-complete.directive.ts – contiene la lógica de la directiva;

  • highlight-on-complete.directive.spec.ts – archivo de pruebas unitarias (puede eliminarse si no es necesario).

A continuación se muestra la estructura básica de la directiva:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Definir la Función de la Directiva

Esta directiva resaltará un elemento de tarea en verde si está marcado como completado. De lo contrario, eliminará los estilos.

Para indicar a Angular que esta clase es una directiva, la decoramos con @Directive:

@Directive({
  selector: '[appHighlightOnComplete]'
})

El selector [appHighlightOnComplete] significa que la directiva se usará como un atributo, no como una etiqueta ni como una directiva estructural.

En tu HTML, la aplicarás así:

<div [appHighlightOnComplete]="task.completed"></div>

Hacer que la Directiva Reaccione a los Cambios

Para detectar cambios en la entrada completed, implementamos la interfaz OnChanges:

highlight-on-complete.ts

highlight-on-complete.ts

copy

También definimos una propiedad de entrada para recibir el valor desde el componente:

highlight-on-complete.ts

highlight-on-complete.ts

copy

Qué hace esto:

  • Informa a Angular que el valor será proporcionado desde la plantilla (anteriormente, pasamos task.complete desde la plantilla);

  • Vincula la propiedad interna completed de la directiva al valor pasado desde la plantilla;

  • Establece un valor predeterminado de true (que será sobrescrito una vez que se reciba el dato real).

Acceso seguro al DOM

Angular utiliza la inyección de dependencias para proporcionar acceso al DOM y a las herramientas de renderizado.

En el constructor, inyectamos:

highlight-on-complete.ts

highlight-on-complete.ts

copy

ElementRef nos proporciona una referencia al elemento DOM anfitrión. Renderer2 nos permite modificar de forma segura los estilos y atributos sin manipular directamente el DOM.

Reacción a cambios con ngOnChanges

Ahora implementemos la lógica principal en ngOnChanges, que se ejecuta cada vez que cambia el valor de entrada.

Implementación completa:

highlight-on-complete.ts

highlight-on-complete.ts

copy

El método ngOnChanges se activa cada vez que Angular detecta cambios en las propiedades de entrada de la directiva.

En este caso, responde a las actualizaciones del valor completed pasado desde la plantilla. Si completed es true, la directiva añade un borde verde y un fondo verde claro al elemento. Si es false, esos estilos se eliminan, devolviendo el elemento a su apariencia original. Esto proporciona una indicación visual de las tareas completadas.

Esta directiva personalizada permite encapsular el comportamiento de estilos de manera reutilizable y limpia. Ahora puedes aplicarla a cualquier elemento de tu aplicación, sin duplicar la lógica en los componentes. Es un excelente ejemplo de cómo el sistema de directivas de Angular puede ayudarte a escribir código más modular y mantenible.

question mark

¿Qué hace la directiva highlight-on-complete?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 4
some-alt