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 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
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
Definiamo 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.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
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
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.
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 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
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
Definiamo 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.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
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
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.
Grazie per i tuoi commenti!