In Angular, la gestione degli eventi è piuttosto banale in quanto possiamo associare all'evento un metodo del component. Tuttavia, questa tecnica è poco efficiente nei casi in cui vogliamo creare comportamenti custom su più controlli. Supponiamo ad esempio, di voler mostrare un tooltip ogni volta che una textbox prende il focus. Se dovessimo associare un metodo per ogni textbox per ogni component finiremmo per scrivere una quantità di codice eccessiva, ridondante e poco manutenibile. In questi casi possiamo creare una direttiva che gestisca l'evento focus dell'oggetto HTML e che esegua il codice che vogliamo. Successivamente, applichiamo questa direttiva ai componenti così da usarla dove serve.
Per attaccarsi all'evento di un oggetto, dobbiamo utilizzare il decorator HostListener al quale passiamo in input il nome dell'evento e un array di parametri che vengono poi passati al metodo che gestisce l'evento. In questo caso, la parola chiave $event specifica che viene passato in input l'oggetto event nativo di JavaScript.
@Directive({ selector: '[myDirective]', }) export class MyDirective { @HostListener('focus', ['$event']) public onFocus(event: any): void { //showtooltip } }
Per utilizzare la direttiva, basta aggiungerla come attributo all'oggetto HTML. Il nome dell'attributo è quello specificato nella proprietà selector del decorator Directive.
<input type="text" myDirective />
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Gestire gli accessi con Token su Azure Container Registry
Recuperare l'ultima versione di una release di GitHub
Eseguire script pre e post esecuzione di un workflow di GitHub
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Ottimizzazione dei block template in Angular 17
La gestione della riconnessione al server di Blazor in .NET 9
Utilizzare Azure Cosmos DB con i vettori
Utilizzare QuickGrid di Blazor con Entity Framework