2014-04-26 17 views
8

Moja angularjs aplikacja używaJak mogę obsługiwać odświeżanie przeglądarki w aplikacji AngularJS SPA?

  • ui-Router
  • plik index.html
  • wszystkie połączenia dla danych logowania i udać się do kontrolera sieci Web ASP.NET z adresem URL, który rozpoczyna się/api/xxx .

Kiedy użytkownik wchodzi na myapp.com, a następnie serwer index.html, który jest tym, czego chcę. Gdy użytkownik wybierze teraz linki na tej stronie, to Ui-Router pokazuje odpowiednie szablony wewnątrz index.html i pasek URL przeglądarka poprawnie wyświetla adresy takie jak:

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

Zauważ, że moja konfiguracja jest tworzona tak:

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

Jeśli użytkownik kliknie teraz na odświeżeniu wówczas przeglądarka zapomina, że ​​to było na index.html i próbuje znaleźć na stronie internetowej: myapp.com/city/london etc co oczywiście nie istnieje. Następnie pokazuje stronę błędu mówiącą, że strona nie istnieje.

Jak mogę sobie z tym poradzić? Chciałbym kliknięcie przez użytkownika na myapp.com/city odświeżyć i idealnie wrócić do myapp.com/city

+0

dlaczego odświeżanie strony przekierowuje użytkownika do 'myapp.com/city/london', który nie istnieje? Jak to możliwe, że nie istnieje? Jak może być na pasku adresu przeglądarki, jeśli nie istnieje? –

+0

"Jak może być na pasku adresu przeglądarki, jeśli nie istnieje". Ponieważ używam kątowego ui-routera. ui-router używa szablonów i zawsze możesz zobaczyć adres na pasku URL ekranu, nawet jeśli rzeczywiste strony mogą nie istnieć. – Melina

+0

To nie ma nic wspólnego z routerem UI.Myślałem, że masz na myśli to, że adres URL wyświetlany w pasku adresu przeglądarki nie istnieje, istnieje, inaczej nigdy byś się nie pojawił :) Twój problem polega na niedopasowaniu routingu HTML5 do twojego serwera. –

Odpowiedz

6

EDIT

Podczas korzystania z HTML5 modle Ruting kątowe należy poinformować serwer jak obsłużyć żądanie Jeśli dojdziesz do jednej z tych tras, na przykład, jeśli spróbujesz wejść na stronę myapp.com/city, pojawi się błąd, ponieważ serwer będzie szukał strony city.html w katalogu głównym serwera, który nie będzie tam. Jeśli przejdziesz do tej trasy z poziomu swojej aplikacji, będzie działać dobrze, ale jeśli ją skopiujesz i wkleisz w pasku adresu przeglądarki, otrzymasz 404, ponieważ serwer nie wie, jak dostać się do city.html. Prostą poprawką byłoby unikanie używania trybu kierowania HTML5. Według kątowych docs trzeba zrobić URL przebudowywanie aby serwer zrozumieć, jak droga do tych stron:

From the docs:

Korzystanie z trybu HTML5 wymaga przepisywania URL po stronie serwera, w zasadzie mieć przepisać wszystkie łącza do punktu wejścia swojej aplikacji (np index.html)

można również zapoznać here, odpowiedź ta omawia jak dostać HTML5 routing pracy z serwerem.

+1

Dziękuję za poradę, ale myślę, że to nie rozwiązuje problemu. Mój problem polega na tym, że przeglądarka odświeża pierwszą rzecz, której szuka, to plik html o nazwie myapp.com/city/london. Ale moja aplikacja ma tylko jeden plik html i jest to plik index.html. – Melina

+0

@Melina zobacz moją edycję. –

2

kiedy użytkownik odświeży aplikację, możesz poprowadzić ją do strony logowania lub domyślnej strony. można to zrobić za pomocą poniższego kodu.

Powiązane problemy