2013-07-24 45 views
8

Nie mogę usunąć symbolu # w IE9. Szukałem odpowiedzi, ale nie znalazłem poprawki.AngularJS Jak usunąć symbol # w IE9 przy użyciu trasy

To zawsze przekierowuje do

http://myhost.com:8080/#/website/ 

i pokazuje ten opis:

The requested resource is not available. 

locationprovider.html5mode(true) nie działa. tej samej trasie pracuje w FireFox i pokazuje

http://myhost.com:8080/website/ 

Jak mogę to naprawić?

+0

Cześć, czy rozwiązać ten problem? Mam dokładnie ten sam problem. –

+0

@ TheLastBlackCat również szuka rozwiązania tego. –

Odpowiedz

6

IE9 nie posiada HTML5 wsparcia historia api, dlatego to dołączanie # do adresu URL, usuwająC# nie rozwiąże Twój problem

+0

dzięki za odpowiedź. Jak mogę rozwiązać ten problem? Wstawianie/#/do/path/in kiedy nie działa zbyt ... :( –

+1

@TheLastBlackCat Użyłbym tylko # na twoim miejscu Wyłącz tryb html5 :) – karaxuna

6

$location Documentation

Patrz "Hashbang i HTML5 tryby"

Zasadniczo Tryb html5 używa History API, gdy obsługuje go przeglądarka i wraca do hashbang (#), gdy nie jest obsługiwany.

Nie można "po prostu" usunąć "#" w przeglądarce bez interfejsu History API. Ponieważ po zmianie adresu URL przeglądarka będzie próbowała wymusić przeładowanie, przełamując przepływ.

0

Użycie window.location.hash = '/' rozwiązało mój problem.

if (window.history && window.history.pushState) { 
 
    $locationProvider.html5Mode(true); 
 
} 
 
else { 
 
     window.location.hash = '/' // IE 9 FIX    
 
     $locationProvider.html5Mode(true); 
 
}

+0

W rzeczywistości kątowy może traktować go we właściwy sposób, jeśli przeglądarka nie obsługuje interfejsu HTE History API, "jeśli interfejs API historii HTML5 nie jest obsługiwany przez przeglądarkę, usługa lokalizacji $ będzie automatycznie korzystać z adresów hashbang." [$ location api] (https://docs.angularjs.org/guide/$location) – Qianyue

1

w rzeczywistości nie można usunąć, ale możemy sprawić, że działa sprawnie

RouterModule.forRoot(ROUTES, { useHash: Boolean(history.pushState) === false });