2014-04-26 11 views
8

La mia applicazione utilizza AngularJSCome posso gestire un aggiornamento del browser in un'applicazione AngularJS SPA?

  • ui-router
  • un file index.html
  • tutte le chiamate per il login e dei dati andare a un Web ASP.NET controller con un URL che inizia con/api/xxx .

Quando un utente immette myapp.com, quindi il server index.html che è quello che voglio. Quando l'utente seleziona ora collegamenti a quella pagina, quindi ui-router mostra i modelli appropriati all'interno della index.html e la barra degli indirizzi del browser viene visualizzato correttamente gli indirizzi come questi:

myapp.com/home 
myapp.com/home/overview 
myapp.com/city 
myapp.com/city/london 

Si noti che la mia configurazione è impostato in questo modo:

.config([ 
    '$httpProvider', '$locationProvider', '$sceProvider', '$stateProvider', 
    function (
     $httpProvider, $locationProvider, $sceProvider, $stateProvider) { 
     $sceProvider.enabled(false); 
     $locationProvider.html5Mode(true); 

Se un utente fa clic sul ora di aggiornamento quindi il browser dimentica che era su index.html e cerca di trovare la pagina web: myapp.com/city/london etc che ovviamente non esiste. Quindi mostra una pagina di errore che dice che la pagina non esiste.

Come posso gestire questa situazione? Vorrei un clic utente su myapp.com/city per aggiornare e idealmente tornare a myapp.com/city

+0

Perché dici aggiornare la pagina reindirizza l'utente a 'myapp.com/città/london' che non esiste? Come può non esistere? Come può essere nella barra degli indirizzi del browser in primo luogo se non esiste? –

+0

"Come può essere nella barra degli indirizzi del browser in primo luogo se non esiste". Perché sto usando un ui-router angolare. ui-router utilizza i modelli e puoi sempre vedere l'indirizzo nella barra degli URL dello schermo anche se le pagine reali potrebbero non esistere. – Melina

+0

Questo non ha nulla a che fare con il router UI.Pensavo volevi dire che l'URL visualizzato nella barra degli indirizzi del browser non esisteva, altrimenti esiste altrimenti non saresti mai arrivato lì :) Il tuo problema è con l'errore di indirizzamento del router HTML5 con il tuo server. –

risposta

6

EDIT

Quando si utilizza HTML5 modle Ruting con angolare è necessario indicare il server come gestire la richiesta Se si arriva a uno di questi percorsi, ad esempio se si tenta di andare su myapp.com/city, si verificherà un errore perché il server cercherà una pagina city.html nella root del server che non ci sarà Se navighi su quella rotta all'interno della tua app funzionerà bene, ma se la copi e la incolli nella barra degli indirizzi del browser riceverai un 404 perché il server non capisce come arrivare a city.html. Una soluzione semplice sarebbe evitare di utilizzare la modalità di routing HTML5. Secondo la documentazione angolari è necessario fare un po 'la riscrittura degli URL per rendere il vostro server di capire come instradare a quelle pagine:

From the docs:

Utilizzando la modalità HTML5 richiede la riscrittura degli URL sul lato server, in pratica si hanno per riscrivere tutti i link a punto di ingresso dell'applicazione (ad esempio index.html)

È possibile anche avere uno sguardo here, questa risposta discute come ottenere HTML5 instradamento lavorare con il server.

+1

Grazie per il vostro consiglio ma penso che questo non risolva la domanda. Il mio problema è quando il browser aggiorna la prima cosa che cerca è un file html chiamato myapp.com/city/london. Ma la mia applicazione ha un solo file html e questo è il file index.html. – Melina

+0

@Melina vedi la mia modifica. –

2

quando l'utente aggiorna l'applicazione, è possibile portarli alla pagina di accesso o alla pagina predefinita. che può essere fatto con il seguente codice

app.run(['$location', function ($location) { 
    $location.path('/login'); 
}]); 
Problemi correlati