2014-04-26 12 views
5

Sto sviluppando una pagina di ricerca e ho il requisito di memorizzare tutti i filtri selezionati e altro stato nell'URL, in modo che gli utenti possano condividere i risultati del loro lavoro.

Uso angular $ location.search() per l'aggiornamento e l'analisi dell'URL. Posizione impostazioni del provider è seguire:

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

Il problema inizia quando utente del browser precedente condivide un legame con hashbang ad un utente con un browser moderno. In tal caso $ location.search() non restituirà nulla.

Come ho capito il motivo è in modalità html5 dopo "#" avvia $ location.hash() e non $ location.search(). Ma qual è l'obiettivo di hashPrefix ('!')? Ho pensato che dovrebbe risolvere questo problema ...

Come posso analizzare una stringa di query in html5Mode (true) se l'utente invia un URL con hashbang?

+1

Quasi non mi piace suggerire questo, ma è possibile provare purl.js per analizzare la stringa di query. L'ho usato oggi e ha funzionato bene. https://github.com/allmarkedup/purl – Jess

+0

Grazie per purl.js. Sfortunatamente il problema è stato risolto come html5Mode (false) .. –

+0

Non è una risposta, è un altro modo che non è desiderabile –

risposta

0

Bene, se si imposta html5Mode su true, questo gestisce tutto il routing all'interno di Angular, ma non riflette il modo in cui il server esegue il routing all'applicazione. Potresti avere percorsi già impostati per le hashbang ora, ma cosa succede se anche tu fornisci i percorsi sul server senza di essi?

Da quanto ho capito, se html5Mode è impostato su true e un browser legacy non lo supporta, verrà automaticamente eseguito il fallback del routing dei tag hash. Se qualcuno dovesse acquisire quell'URL, quindi condividerlo con un amico e tu avessi il supporto sul tuo server per convertire correttamente la query, il percorso e il link diretto alla tua applicazione Angular per entrambe le circostanze, sembra che tu possa essere coperto.

Problemi correlati