5

tworzę aplikację wyszukiwania w angularjs z tymi ustawieniami:alternatywna do wykorzystania hashbangs w adresie URL, aby rozwiązać problem IE9

App Config:

app.config(
    [ 
     '$locationProvider', 
     function ($locationProvider) { 
      $locationProvider.html5Mode({ 
       enabled: true, 
       requireBase: false, 
       rewriteLinks: false 
      }); 
     } 
    ] 
); 

Problemem nie jest sama aplikacja ale gdy próbuję uzyskać dostęp do strony za pomocą IE9 nie jestem w stanie uzyskać do niego dostępu. Po przeczytaniu som dowiedziałem się, że IE9 ignoruje everyting, który przychodzi po # w adresie URL, i przekierowuje użytkownika z powrotem do adresu URL hosta (wszystko przed # w adresie URL). Standardowym powrotem do trybu html5 jest tryb hashbang. Angular docs for $location

Moje pytanie brzmi, czy ktokolwiek wie, czy istnieje jakikolwiek sposób wykorzystania hashbangów w adresie URL lub czy ktokolwiek inny ma ten problem. Jeśli potrzebujesz więcej dokumentacji, daj mi znać, a dostarczę!

EDIT: To jest wewnątrz sterownika:

$scope.$on('$locationChangeSuccess', function() {; 
     $scope.searchQuery = $location.search()['q']; 
     $scope.search(); 
    }); 

EDIT: "!" Dodawanie $locationProvider.hashPrefix('!'); nie będzie działać, ponieważ będzie dodawać tylko po "#" w adresie URL.

widoczny obraz z kanciastych docs:

Angular docs on locationprovider

+0

„Po zrobieniu som czytania i okazało się, że IE9 ignoruje wszystko, co przychodzi po # w adresie URL, i przekierowuje użytkownika z powrotem do adresu URL hosta ". Oto, jak działa skrót w adresie URL. Angularne prace, biorąc je i przetwarzając je w użyteczny adres URL wewnętrznie. –

+0

Jaki jest problem? Dlaczego nie masz do niego dostępu w IE9? Czy zrobiłeś jakieś rozwiązywanie problemów? Zastąpienie jest poprawne, jak możemy zobaczyć w dokumentacji. – falsarella

Odpowiedz

0

IE9 nie obsługuje history.pushState patrz: http://caniuse.com/#feat=history

Dlatego po włączeniu html5Mode jak: $locationProvider.html5Mode(true) Dla IE9 będzie awaryjne do # w adresie URL - nie ma możliwości obejścia tego problemu.

Powiedziawszy, że nadal powinieneś być w stanie używać $location.search(); można uzyskać params wyszukiwania tak: var searchObject = $location.search(); Aby uzyskać konkretny parametr można zrobić: $location.search().paramName

Zobacz https://docs.angularjs.org/api/ng/service/ $ lokalizację dla dalszych informacji.

Alternatywą dla służby $location jest wstrzykiwać $routeParams zobacz: https://docs.angularjs.org/api/ngRoute/service/ $ routeParams ale im pewności przypadku użycia, routeParams są aktualizowane tylko po zmianie trasa jest zakończona

+0

Włączam html5Mode, ale w IE9 moja aplikacja utknęła w nieskończonej pętli bezpośredniej. Jak odzyskać #urls, aby działał poprawnie? – duyn9uyen