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 | Mastering Angular Directives and Pipes
Introduzione ad Angular

bookCreazione di Direttive Personalizzate in Angular

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 prima cosa, è buona pratica organizzare il codice creando una cartella dedicata alle direttive. Chiamiamola directives.

Questo comando crea una nuova cartella chiamata 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

copy

Definire la Funzionalità della Direttiva

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

Per indicare ad Angular che questa classe è una direttiva, la decoriamo con @Directive:

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

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

Nel tuo HTML, la applicherai in questo modo:

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

Rendere la direttiva reattiva ai cambiamenti

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

highlight-on-complete.ts

highlight-on-complete.ts

copy

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

highlight-on-complete.ts

highlight-on-complete.ts

copy

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

copy

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.

Reazione 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

copy

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 compiti completati.

Questa direttiva personalizzata consente di incapsulare il comportamento degli stili in modo riutilizzabile e pulito. Ora puoi applicarla a qualsiasi elemento della tua applicazione, senza duplicare la logica tra i componenti. È un ottimo esempio di come il sistema di direttive di Angular possa aiutarti a scrivere codice più modulare e manutenibile.

question mark

Cosa fa la direttiva highlight-on-complete?

Select the correct answer

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

bookCreazione di Direttive Personalizzate in Angular

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 prima cosa, è buona pratica organizzare il codice creando una cartella dedicata alle direttive. Chiamiamola directives.

Questo comando crea una nuova cartella chiamata 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

copy

Definire la Funzionalità della Direttiva

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

Per indicare ad Angular che questa classe è una direttiva, la decoriamo con @Directive:

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

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

Nel tuo HTML, la applicherai in questo modo:

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

Rendere la direttiva reattiva ai cambiamenti

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

highlight-on-complete.ts

highlight-on-complete.ts

copy

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

highlight-on-complete.ts

highlight-on-complete.ts

copy

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

copy

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.

Reazione 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

copy

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 compiti completati.

Questa direttiva personalizzata consente di incapsulare il comportamento degli stili in modo riutilizzabile e pulito. Ora puoi applicarla a qualsiasi elemento della tua applicazione, senza duplicare la logica tra i componenti. È un ottimo esempio di come il sistema di direttive di Angular possa aiutarti a scrivere codice più modulare e manutenibile.

question mark

Cosa fa la direttiva highlight-on-complete?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 4
some-alt