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
Definire il colore di una scrollbar HTML tramite CSS
Utilizzare Container Queries nominali
Eseguire query in contemporanea con EF
Utilizzare WhenEach per processare i risultati di una lista di task
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Escludere alcuni file da GitHub Copilot
Evitare memory leaks nelle closure JavaScript
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Introduzione ai web component HTML
Gestione file Javascript in Blazor con .NET 9
Utilizzare l'espressione if inline in una pipeline di Azure DevOps


