Nello script precedente non siamo stati del tutto sinceri riguardo i Web Component e la gestione degli eventi. Quello che abbiamo creato, e che ripresentiamo qui di seguito
// HTML <my-button id="myButton"></my-button> var button = document.getElementById('myButton'); button.addEventListener('click', () => { alert('Hai cliccato il pulsante!'); });
non è un evento che si collega direttamente al click del bottone, presente nel Web component, ma è un evento di click sull'elemento HTML "my-button". Per essere più chiari e fare un ulteriore esempio: avremmo potuto inserire anche del testo e l'evento si sarebbe scatenato ugualmente.
Per riuscire a gestire gli eventi generati all'interno del componente, dalla pagina che lo contiene, abbiamo bisogno di eseguire un dispatchEvent, che permetta di informare il DOM riguardo un particolare avvenimento, e di creare dei subscribers o listeners che si mettano in attesa di tale evento.
Modifichiamo il codice come segue:
// javascript web component class MyButton extends HTMLElement { constructor() { // [...codice precedente] button.addEventListener('click', () => { console.log('Hai cliccato su Button - da WebComponent'); this.dispatchEvent(new CustomEvent('buttonClick')); }); // Aggiunta a shadow DOM [...] } }
In conclusione, nel Javascript della pagina, ci mettiamo in ascolto di un evento chiamato "buttonClick" emanato proprio dal Web component
var button = document.getElementById('myButton'); // button.addEventListener('click', () => { // alert('Hai cliccato il pulsante!'); // }); button.addEventListener('buttonClick', () => { console.log('Hai cliccato su Button 1 - da Pagina HTML'); });
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare Azure AI Studio per testare i modelli AI
Cancellare una run di un workflow di GitHub
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Escludere alcuni file da GitHub Secret Scanning
Ordine e importanza per @layer in CSS
La gestione della riconnessione al server di Blazor in .NET 9
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Applicare un filtro per recuperare alcune issue di GitHub
Eliminare una project wiki di Azure DevOps
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Utilizzare Copilot con Azure Cosmos DB