Creazione 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 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
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
Si definisce anche una proprietà di input per ricevere il valore dal componente:
highlight-on-complete.ts
Cosa fa questo:
-
Informa Angular che il valore sarà fornito dal template (in precedenza, abbiamo passato
task.completedal 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
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
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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 3.13
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
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
Si definisce anche una proprietà di input per ricevere il valore dal componente:
highlight-on-complete.ts
Cosa fa questo:
-
Informa Angular che il valore sarà fornito dal template (in precedenza, abbiamo passato
task.completedal 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
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
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.
Grazie per i tuoi commenti!