5

Sto creando un applicazione di ricerca in angularjs con queste impostazioni:alternativa all'uso del hashbangs nell'URL per risolvere problema IE9

App Config:

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

Il problema non è l'applicazione stessa ma quando sto cercando di accedere alla pagina con IE9 non riesco ad accedervi del tutto. Dopo aver letto qualcosa ho scoperto che IE9 ignora tutto ciò che viene dopo il # in un url e reindirizza l'utente all'URL dell'host (tutto prima del # nell'url) E il fallback standard per html5mode è hashbang-mode. Angular docs for $location

La mia domanda è se qualcuno sa se c'è un modo per aggirare l'uso di hashbang nell'URL o se qualcun altro ha questo problema. Se è necessaria più documentazione, per favore fatemi sapere e fornirò!

EDIT: Questo è all'interno del controller:

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

EDIT: "!" Aggiunta $locationProvider.hashPrefix('!'); non funzionerà perché sarà solo aggiungere un dopo il "#" nell'URL.

vedi immagine da docs angolari:

Angular docs on locationprovider

+0

"Dopo aver fatto la lettura som ho scoperto che IE9 ignora tutto ciò che viene dopo il # in un url e reindirizza l'utente all'URL dell'host ". Ecco come funziona l'hash in un URL. Angular funziona prendendo questo e analizzandolo internamente in un URL utilizzabile. –

+0

Quindi, qual è il problema? Perché non sei in grado di accedervi in ​​IE9? Hai risolto il problema? Il fallback è corretto, come possiamo vedere nella documentazione. – falsarella

risposta

0

IE9 non supporta history.pushState, vedi: http://caniuse.com/#feat=history

Pertanto, quando si abilita html5Mode come: $locationProvider.html5Mode(true) Per IE9 si eseguirà il fallback per la # nell'URL - non c'è modo di aggirare questo

Detto questo dovresti essere ancora in grado di usare $location.search(); È possibile ottenere i params di ricerca come questa: var searchObject = $location.search(); Per ottenere un parametro specifico che si può fare: $location.search().paramName

Vedi https://docs.angularjs.org/api/ng/service/ $ location per ulteriori informazioni.

Un'alternativa al servizio $location è quello di iniettare $routeParams, vedi: https://docs.angularjs.org/api/ngRoute/service/ $ routeParams Ma im sicuri del vostro caso d'uso, routeParams vengono aggiornate solo dopo un cambio percorso è completato

+0

Ho abilitato html5Mode ma in IE9, la mia app si blocca in un ciclo diretto infinito. Come faccio a riportare indietro #urls per funzionare correttamente? – duyn9uyen

Problemi correlati