---
description: >-
  Las Directivas son una parte super importante de Angular, ellas nos permiten
  extender nuestro HTML y darle un toque único que veremos a continuación.
---

# 🧑‍🎨Directivas🧑‍🎨

## ¿Qué es una Directiva?

Una directiva se puede considerar como una parte muy importante del núcleo de Angular.&#x20;

Las Directivas extienden la funcionalidad del HTML usando para ello una nueva sintaxis. Con ella podemos usar lógica que será ejecutada en el DOM (Document Object Model).

Cada Directiva que usamos tiene un nombre, y determina donde puede ser usada, sea en un elemento, atributo, componente o clase.

Se dividen en tres tipos diferentes:

* Directivas de Atributo
* Directivas de estructurales
* Componentes

![Al extender  nuestro HTML podemos darle toques únicos](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M0o5L4PI2fcqzKhQJZ9%2F-M0o6MBxnNw3ZlCyua-O%2Fangulardirectiva.png?alt=media\&token=f4eab363-1dee-452a-ad6c-6ca29ef76d1f)

## Tipos de Directivas



### Directivas de Atributo

Alteran la apariencia o comportamiento de un elemento del DOM. Son usados como atributos de los elementos.

![](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6ShFTEK1sz_ZNj04xg%2F-M6ShJUsrS71qz1XjHg9%2Fdirectivas-atributo.png?alt=media\&token=f142c869-b4af-4c1f-b9a9-82eb68f6abab)

Entre la directivas de atributo, encontramos:

* **ngModel**: Implementa binding
* **ngClass**: permite añadir/eliminar varias clases
* **ngStyle**: permite asignar estilos inline

### Directivas Estructurales

Nos permite añadir, manipular o eliminar  elementos del DOM.

![](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6ShFTEK1sz_ZNj04xg%2F-M6Siqv62HHbFj7LmMgl%2Fdirectivas-estructurales.png?alt=media\&token=3591551d-cbb3-4c2a-9d9e-0a0db30b4310)

Algunas directivas estructurales tienen un asterisco (\*), que precede al nombre del atributo de la directiva.

En las directivas estructurales podemos encontrar las siguientes:

* **\*ngIf**: Nos permite incluir condicionales de lógica en nuestro código, como por ejemplo evaluar sentencias, hacer comparaciones, mostrar u ocultar secciones de código, y entre las muchas condiciones que deseemos crear, para que se renderice nuestro HTML, cumpliendo la sentencia a evaluar. Con el \*ngIf, podemos evaluar sentencias con un simple If, podemos evaluar el **else**, para que no cumpliéndose la primera condición que se evalúa nuestro código ejecute otra acción en el caso contrario y podemos además incluir el **then**, para que cumpliendose la condición afirmativa (if), podemos añadir más flexibilidad a nuestro código incluyéndole un camino afirmativo adicional.

![Ejemplo \*ngIF](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6NoaHONL67Dlqg9QCA%2F-M6NpJkovpBks9xtolRz%2Fcarbon%20\(5\).png?alt=media\&token=7285a1ff-2153-4c44-ae3d-b0bde53aac21)



* **\*ngFor**: Permite ejecutar bucles, los bucles son los que conocemos en lógica de programación como: for, while, foreach, etc. Con esta directiva estructurar podemos evaluar de acuerdo a nuestra condición n veces.

![Ejemplo de \*ngFor](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6NoaHONL67Dlqg9QCA%2F-M6Np84X-OHXTl59LlnT%2Fcarbon%20\(4\).png?alt=media\&token=f12653c4-a3ba-4851-a013-1f9fd9df269f)



* **ngSwitch**: esta directiva es similar al **\*ngIf**, y es como el switch en lógica de programación. En esta directiva se pueden crear los diferentes casos que deseamos evaluar y cuando se cumple la condición esperada, oculta/muestra el HTML. Nos permite mantener nuestro código más limpio, si necesitamos evaluar varias sentencias.

![Ejemplo ngSwitch](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6NoaHONL67Dlqg9QCA%2F-M6NpwV8XVQao1nbQ4Yb%2Fcarbon%20\(6\).png?alt=media\&token=a1682552-ae78-4b9b-a31f-2efb9e414ddf)

###

* **ngPlural**: es una directiva que permite agregar o remover elementos del DOM, basado en un valor númerico. Para usar esta directiva, se debe proporcionar un elemento contenedor que establezca el atributo \[ngPlural] en una expresión de cambio. Los elementos internos con un \[ngPluralCase] ​​se mostrarán en función de su expresión. Si \[ngPluralCase] ​​se establece en una expresión (que comience con = o ‘>’ o ‘<’ etc.), el elemento se mostrará, si el valor es igual a la expresión.\
  Para mostrar valores por defecto se puede usar el string “other”.

![Ejemplo ngPlural](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6R-6dfxXsuoCwyOJP7%2F-M6S5dDAaY5G8trs2dYR%2Fcarbon%20\(7\).png?alt=media\&token=a174e3fd-132f-4598-879f-b676ef515464)

###

* ngTemplate: esta directiva como su nombre lo indica es un template en Angular. El contenido de esta etiqueta puede reutilizarse en otros templates. Dentro de la etiqueta ng-template tenemos acceso a las mismas variables de contexto que son visibles en el template exterior, como por ejemplo la variable ‘noSuperHeroes’. Esto se debe a que las instancias de ng-template tienen acceso al mismo contexto en el cual están integradas. Además cada template también puede definir su set de variables.

![Ejemplo ngTemplate](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6R-6dfxXsuoCwyOJP7%2F-M6S5oLUOXdfCSQQ7Em-%2Fcarbon%20\(8\).png?alt=media\&token=b325b9eb-cf70-4a78-aee1-a5c80eed8fd6)



* **ngComponentOutlet**: nos permite crear componentes dinámicos.&#x20;

![Ejemplo ngComponentOutlet](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6R-6dfxXsuoCwyOJP7%2F-M6SBP9KDM5rw-CXmzha%2Fcarbon%20\(9\).png?alt=media\&token=ddf77ffe-0bbc-44ab-8c62-07b316403745)

### Directivas de Componente

Las Directivas de Componente son directivas con un Template. Los componentes tienen decoradores "**@Component"**, el componente es un decorador **@Directive** que es extendido con características propias de los _**templates**_.

## ¿Cómo generar una directiva?

Desde el Angular CLI podemos generar una directiva usando el siguiente comando:

```
ng generate directive <name> [options]
```

En su forma abreviada sería:

```
ng g d [name]
```

Si usamos un IDE online como **Stackblitz** con solo dar clic derecho sobre la carpeta src, nos aparecerá una opción llamada Angular Generator, si colocamos el mouse sobre esa opción, mostrará varias opciones, entre ellas Directive. Al seleccionarla y colocar un nombre, se genera la directiva.

![Creación de directiva usando Stackblitz](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6NoaHONL67Dlqg9QCA%2F-M6NovEkGu1dq2G19fsY%2FScreen%20Shot%202020-05-02%20at%2011.30.33%20PM.png?alt=media\&token=bc9a38ab-12b2-4633-b580-15b71740e251)

![Ejemplo de la directiva generada en Stackblitz](https://2661087327-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LbFy569GFu09bPpzMDJ%2F-M6NoaHONL67Dlqg9QCA%2F-M6NozsJhpvr_yDeHP3M%2FScreen%20Shot%202020-05-02%20at%2011.32.38%20PM.png?alt=media\&token=c6f24d20-9872-4ea3-bb5c-6a7c372eb0df)

###

###
