Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Creazione di Direttive Personalizzate in Angular | Padronanza delle Direttive e delle Pipe di Angular
Introduzione ad Angular

Creazione di Direttive Personalizzate in Angular

Scorri per mostrare il menu

Angular offre una serie di direttive integrate come ngIf, ngFor e ngClass. Tuttavia, è anche possibile creare direttive personalizzate per gestire compiti specifici all'interno dell'applicazione. Vediamo come costruirne una con un esempio pratico.

Generazione della direttiva personalizzata

Per una migliore organizzazione del codice, è consigliabile creare una cartella dedicata alle direttive. Chiamiamola directives.

Questo comando crea una nuova cartella denominata directives all'interno della directory app e aggiunge al suo interno il nuovo file della direttiva:

  • highlight-on-complete.directive.ts – contiene la logica della direttiva;

  • highlight-on-complete.directive.spec.ts – file di test unitario (può essere eliminato se non necessario).

Ecco come si presenta la struttura di base della direttiva:

highlight-on-complete.ts

highlight-on-complete.ts

Definizione della Funzionalità della Direttiva

Questa direttiva evidenzia un elemento attività in verde se è contrassegnato come completato. In caso contrario, rimuove gli stili.

Per indicare ad Angular che questa classe è una direttiva, si utilizza il decoratore @Directive:

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

Il selettore [appHighlightOnComplete] indica che la direttiva verrà utilizzata come attributo, non come tag o direttiva strutturale.

Nel tuo HTML, verrà applicata in questo modo:

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

Rendere la direttiva reattiva ai cambiamenti

Per rilevare le modifiche all'input completed, si implementa l'interfaccia OnChanges:

highlight-on-complete.ts

highlight-on-complete.ts

Si definisce anche una proprietà di input per ricevere il valore dal componente:

highlight-on-complete.ts

highlight-on-complete.ts

Cosa fa questo:

  • Informa Angular che il valore sarà fornito dal template (in precedenza, abbiamo passato task.complete dal template);

  • Collega la proprietà interna completed della direttiva al valore passato dal template;

  • Imposta un valore predefinito di true (che verrà sovrascritto una volta ricevuti i dati effettivi).

Accesso sicuro al DOM

Angular utilizza l'iniezione delle dipendenze per fornire accesso al DOM e agli strumenti di rendering.

Nel costruttore, iniettiamo:

highlight-on-complete.ts

highlight-on-complete.ts

ElementRef ci fornisce un riferimento all'elemento DOM host. Renderer2 ci permette di modificare in modo sicuro stili e attributi senza manipolare direttamente il DOM.

Reagire ai cambiamenti con ngOnChanges

Ora implementiamo la logica principale in ngOnChanges, che viene eseguita ogni volta che il valore dell'input cambia.

Implementazione completa:

highlight-on-complete.ts

highlight-on-complete.ts

Il metodo ngOnChanges viene attivato ogni volta che Angular rileva modifiche alle proprietà di input della direttiva.

In questo caso, risponde agli aggiornamenti del valore completed passato dal template. Se completed è true, la direttiva aggiunge un bordo verde e uno sfondo verde chiaro all'elemento. Se è false, questi stili vengono rimossi, riportando l'elemento al suo aspetto originale. Questo fornisce un'indicazione visiva dei task completati.

Questa direttiva personalizzata consente di incapsulare il comportamento di stile in modo riutilizzabile e pulito. Ora è possibile applicarla a qualsiasi elemento dell'applicazione, senza duplicare la logica tra i componenti. È un ottimo esempio di come il sistema di direttive di Angular possa aiutare a scrivere codice più modulare e manutenibile.

question mark

Cosa fa la direttiva highlight-on-complete?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 3. Capitolo 4
some-alt