Les directives són una de les característiques més potents d'Angular. Permeten modificar el comportament dels elements del DOM de manera declarativa. En aquest tema, explorarem les directives integrades que Angular proporciona per defecte.

Què són les directives?

Les directives són classes que poden modificar el comportament dels elements del DOM. Hi ha tres tipus principals de directives en Angular:

  1. Directives d'atribut: Canvien l'aparença o el comportament d'un element, component o altra directiva.
  2. Directives estructurals: Canvien la disposició del DOM afegint o eliminant elements.
  3. Components: Són directives amb una plantilla associada.

Directives d'atribut integrades

ngClass

La directiva ngClass permet afegir o eliminar classes CSS d'un element de manera dinàmica.

Exemple:

<div [ngClass]="{'active': isActive, 'disabled': isDisabled}">
  Aquest div tindrà la classe 'active' si isActive és true i 'disabled' si isDisabled és true.
</div>

Explicació:

  • isActive i isDisabled són variables booleanes del component.
  • La classe active s'aplicarà si isActive és true.
  • La classe disabled s'aplicarà si isDisabled és true.

ngStyle

La directiva ngStyle permet aplicar estils CSS a un element de manera dinàmica.

Exemple:

<div [ngStyle]="{'color': textColor, 'font-size': fontSize + 'px'}">
  Aquest text tindrà el color i la mida de font especificats.
</div>

Explicació:

  • textColor i fontSize són variables del component.
  • El color del text serà el valor de textColor.
  • La mida de la font serà el valor de fontSize en píxels.

Directives estructurals integrades

ngIf

La directiva ngIf permet afegir o eliminar elements del DOM basant-se en una condició.

Exemple:

<div *ngIf="isVisible">
  Aquest div només es mostrarà si isVisible és true.
</div>

Explicació:

  • isVisible és una variable booleana del component.
  • El div només es mostrarà si isVisible és true.

ngFor

La directiva ngFor permet iterar sobre una col·lecció d'elements i crear una instància del DOM per a cada element.

Exemple:

<ul>
  <li *ngFor="let item of items">
    {{ item }}
  </li>
</ul>

Explicació:

  • items és una col·lecció (array) del component.
  • Per a cada element de items, es crearà un element li amb el contingut de l'element.

ngSwitch

La directiva ngSwitch permet mostrar o ocultar elements basant-se en una condició.

Exemple:

<div [ngSwitch]="viewMode">
  <div *ngSwitchCase="'map'">Vista de mapa</div>
  <div *ngSwitchCase="'list'">Vista de llista</div>
  <div *ngSwitchDefault>Vista per defecte</div>
</div>

Explicació:

  • viewMode és una variable del component.
  • Es mostrarà el div corresponent al valor de viewMode ('map', 'list' o per defecte).

Exercicis pràctics

Exercici 1: Utilitzar ngClass i ngStyle

Objectiu: Crear un component que canviï la classe i els estils d'un element basant-se en variables del component.

Instruccions:

  1. Crea un component nou anomenat StyleToggleComponent.
  2. Afegeix dues variables booleanes al component: isActive i isDisabled.
  3. Afegeix un div al template del component que utilitzi ngClass i ngStyle per canviar la classe i els estils basant-se en les variables.
  4. Afegeix dos botons per canviar els valors de isActive i isDisabled.

Solució:

// style-toggle.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-style-toggle',
  templateUrl: './style-toggle.component.html',
  styleUrls: ['./style-toggle.component.css']
})
export class StyleToggleComponent {
  isActive = false;
  isDisabled = false;

  toggleActive() {
    this.isActive = !this.isActive;
  }

  toggleDisabled() {
    this.isDisabled = !this.isDisabled;
  }
}
<!-- style-toggle.component.html -->
<div [ngClass]="{'active': isActive, 'disabled': isDisabled}" [ngStyle]="{'color': isActive ? 'green' : 'red'}">
  Aquest div canvia de classe i estil.
</div>
<button (click)="toggleActive()">Toggle Active</button>
<button (click)="toggleDisabled()">Toggle Disabled</button>

Exercici 2: Utilitzar ngIf i ngFor

Objectiu: Crear un component que mostri una llista d'elements i permeti afegir-ne de nous.

Instruccions:

  1. Crea un component nou anomenat ItemListComponent.
  2. Afegeix una variable items que sigui un array de strings.
  3. Afegeix un input i un botó per afegir nous elements a la llista.
  4. Utilitza ngFor per mostrar la llista d'elements.
  5. Utilitza ngIf per mostrar un missatge quan la llista estigui buida.

Solució:

// item-list.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-item-list',
  templateUrl: './item-list.component.html',
  styleUrls: ['./item-list.component.css']
})
export class ItemListComponent {
  items: string[] = [];
  newItem: string = '';

  addItem() {
    if (this.newItem) {
      this.items.push(this.newItem);
      this.newItem = '';
    }
  }
}
<!-- item-list.component.html -->
<div>
  <input [(ngModel)]="newItem" placeholder="Nou element">
  <button (click)="addItem()">Afegeix</button>
</div>
<ul>
  <li *ngFor="let item of items">{{ item }}</li>
</ul>
<div *ngIf="items.length === 0">
  La llista està buida.
</div>

Conclusió

Les directives integrades d'Angular són eines poderoses que permeten modificar el comportament i l'aparença dels elements del DOM de manera declarativa. En aquest tema, hem explorat algunes de les directives d'atribut i estructurals més utilitzades, com ngClass, ngStyle, ngIf, ngFor i ngSwitch. A més, hem practicat amb exercicis per reforçar els conceptes apresos. En el proper tema, explorarem com crear directives personalitzades per adaptar-les a les nostres necessitats específiques.

Curs d'Angular 2+

Mòdul 1: Introducció a Angular

Mòdul 2: Conceptes bàsics de TypeScript

Mòdul 3: Components i plantilles

Mòdul 4: Directives i pipes

Mòdul 5: Serveis i injecció de dependències

Mòdul 6: Enrutament i navegació

Mòdul 7: Formularis en Angular

Mòdul 8: Client HTTP i observables

Mòdul 9: Gestió d'estat

Mòdul 10: Proves en Angular

Mòdul 11: Temes avançats

Mòdul 12: Desplegament i millors pràctiques

© Copyright 2024. Tots els drets reservats