2013-05-30 12 views
9

Mam angularjs aplikację, skonfigurowany z następujących czynności:angularjs: Hashbang URL utrzymuje dołączanie do siebie na pełne odświeżanie

$locationProvider.html5Mode(true); 
$locationProvider.hashPrefix('!'); 

Dlatego w nowoczesnych przeglądarek, działa z pushState żadnego problemu, przykładem URL byłoby:

http://myapp.com/members 

W starszych przeglądarkach, np. IE9, kiedy przejść do tego adresu URL, przepisuje je zgodnie z oczekiwaniami do:

http://myapp.com/members#!/members 

Kliknięcie żadnych linków z tego punktu stosuje metodę hashbang także słusznie:

http://myapp.com/members#!/members/add 

jednak ...

Po pełnym przeładowaniu strony, gdy jest już na hafcie przepisanym hashbang, będzie nadal dołączać skrót do siebie. Pierwszy odświeżania:

http://myapp.com/members#!/members#!/members#!%2Fmembers 

.. a drugi odświeżania:

http://myapp.com/members#!/members#!/members#!%2Fmembers#!/members#!%2Fmembers%23!%2Fmembers%23!%2Fmembers 

Co tu się dzieje, że może być tego przyczyną? Zwykle tak się nie stanie, ponieważ ludzie będą poruszać się po aplikacji, a kątowa obsłuży adresy URL, ale wykonanie pełnego przeładowania zdaje się ją łamać. Dzięki.

+0

"W starszych przeglądarkach, np. IE9" Cóż, jest twój problem! LOL (Wiem, nie jest pomocny, ale jako pokuta, teraz pójdę i poszukaj naszego kodu shim na ten temat.) – Sharondio

Odpowiedz

6

spróbuj ustawić

<base href="/" /> 

w głowie? Może to być kanciasty błąd 1.1.5.

+0

Jestem na 1.1.5 i działa! dziękuję :) –

+0

DZIĘKUJEMY! Nawet w nowoczesnych przeglądarkach, które obsługują interfejs History API, hashbang url nie przepisałby poprawnie do URL-a innego niż hashbang. Zbyt wiele czasu poświęcałem na to, ale teraz to działa. Dzięki! – gengkev

+0

Należy zauważyć, że w kanale 1.2 zadeklarowanie adresu bazowego nie jest już zalecane, w rzeczywistości http://docs.angularjs.org/guide/dev_guide.services.$location – Daan

1

Umieszczenie <base> tag w swojej <head> wydaje się być droga ...

<head> 
    <base href="/"> 
</head> 

... ale może być więcej, że trzeba zrobić. Ustawiłem też $locationProvider na html5Mode i otrzymałem błędy po załadowaniu mojej strony.

myAngularModule.config($locationProvider => 
{ 
    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: false, 
     rewriteLinks: false 
    }); 
}); 

miałem również configure my server dla html5Mode.

Powiązane problemy