Nelle SPA (Single Page Application) troviamo una gestione delle pagine indipendente dall'url: l'aggiornamento dell'url non corrisponde con un ri-caricamento della pagina, ma il layout viene modificato e/o aggiornato attraverso funzioni JavaScript. All'interno di un framework la funzionalità è implementata out-of-the-box, ma se avessimo un nostro portale, in cui dover gestire poche pagine, come potremmo fare?
La metodologia più conosciuta è usare l'history.pushState.
function navigateTo(event) { // gestione dell'evento event.preventDefault(); // set url window.history.pushState(null, '', 'my-page'); // aggiornamento pagina changePage(); }
Questa funzione presenta un problema: deve essere scritta più volte all'interno della pagina, non avremo quindi un punto unico in cui gestire la logica, e non è adatta alla gestione della navigazione tramite form submit.
Per ovviare a ciò, aggiungiamo un listener all'evento navigate dell'oggetto navigation. In questo modo avremo un punto centralizzato di controllo su qualsiasi evento che porterà a un cambio di url della pagina.
navigation.addEventListener('navigate', navigateEvent => { switch (navigateEvent.destination.url) { case 'https://example.com/': navigateEvent.transitionWhile(loadIndexPage()); break; case 'https://example.com/hello': navigateEvent.transitionWhile(loadHelloPage()); break; } });
La logica è pressochè invariata: all'esecuzione di una navigazione, l'evento viene intercettato e gestito. In base all'url della pagina viene eseguita la funzione transitionWhile, un metodo che mette il client in attesa della risoluzione di una promise, passata come argomento, la quale conterrà le istruzioni per aggiornare la pagina coerentemente con l'url fornito.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Scrivere selettori CSS più semplici ed efficienti con :is()
Esporre un server MCP con Azure API Management
Interagire con Azure DevOps tramite MCP Server
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Gestione degli eventi nei Web component HTML
Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste
Testare il failover sulle region in Azure Storage
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Configurare automaticamente un webhook in Azure DevOps
Gestire progetti NPM in .NET Aspire
I più letti di oggi
- Integrare OpenAI tramite Aspire
- Analizzare il contenuto di una issue con GitHub Models e AI
- Interagire con Azure DevOps tramite MCP Server
- .NET Conference Italia 2025 - Milano
- The Agentic Day - Milano
- Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9