2013-03-04 16 views
38

Nell'app Angularjs, ho un URL come
http://url.com/my_app/#/store/items.
Ora voglio aggiungere stringa di query, ad esempio,
http://url.com/my_app/#/store/items?page=2.

ma in url, javascript codifica il che non voglio. Dovrebbe rimanere "?" solo nell'url come angularjs $ location.search() non restituisce nulla per "% 3F".

Come si può fare?come passare "punto interrogativo" in url javascript

+0

Scegli questa http://www.w3schools.com/jsref/jsref_encodeuri.asp – 999k

+0

dovrebbe il modello URL simile 'http://url.com/my_app/#/store/items/page/2' invece di 'http: //url.com/my_app/#/store/items? page = 2'. Come può essere più corretto avere '/' pattern al posto di '?' Pattern dopo il '#' – rajkamal

+0

no voglio aggiungerlo solo in qurystring .. Il suo requisito // – Amb

risposta

81

non c'è abbastanza dettagli nella tua domanda quindi mi immagino che si sta utilizzando AngularJS instradamento - o almeno la $location service - in modalità non-HTML5. In tal caso, la parte successiva al carattere # rappresenta l'URL dal punto di vista dell'applicazione a pagina singola (ulteriori informazioni su AngularJS here).

Se le ipotesi sopra riportate sono corrette, significa che non si dovrebbe provare ad aggiungere o modificare il punto interrogativo "a mano". Invece è necessario modificare la parte search di $location per manipolare la stringa di query (parte dopo ?) e il punto interrogativo verrà aggiunto/rimosso all'URL finale in base alle esigenze.

Nel tuo caso si potrebbe scrivere:

$location.path('/store/items').search('page', 2) 

Ciò presuppone che si stanno manipolando gli URL da JavaScript, come affermato nella sua interrogazione.

+1

risposta molto bella! funziona molto bene per me e molto più pulito di quello che ho fatto semplicemente perché non ho RTFM: D –

+0

ya imparare qualcosa di nuovo ogni giorno ... Grazie per questa risposta – JT703

+0

Sicuramente la risposta corretta. Un po 'di risucchio però se hai un URL precompilato da qualche altra parte nell'app che ora devi analizzare in 3 valori. Uh ... è cacca angolare. Owch! – Mark

-2

È possibile utilizzare decodeURIComponent.

Ad esempio:

decodeURIComponent('http://url.com/my_app/#/store/items%3Fpage=2'); 
// will give you `http://url.com/my_app/#/store/items?page=2` 
+1

ho provato questo, ma non funziona, basta solo "?" – Amb

+0

Non giocherellare con l'URL per te! Nel contesto angolare ci sono modi migliori di quello. Vedi la risposta di @ pkozlowski.opensource o ancora meglio usa $ state.go (a, parametri, opzioni) dove params è un oggetto che contiene i parametri della tua query definiti nel tuo stato e i loro valori non codificati. – aaki

24

Se si utilizza il servizio $ location, utilizzare invece $location.url('/store/items?page=2'). Questo è stato un metodo setter da almeno 1.0.7 e funziona bene nella mia app 1.1.5.

+2

Def la migliore risposta se tutto quello che hai è la stringa url. – Vakey

1

Se si sta utilizzando il ui-router che è altamente raccomandato, è possibile utilizzare $state.go(to, params, options) come descritto here.

Come prerequisito è necessario definire correttamente il proprio stato, ovvero tutti i parametri di query possibili devono essere resi noti all'interfaccia utente. Vedere il seguente esempio (page e otherParam):

$stateProvider. 
state('storeItems', { 
    url: '/store/items?page&otherParam', 
    templateUrl: '/modules/store/views/item.client.view.html' 
}); 

E poi si può solo passare delle riprese per esempio da un controller chiamando

$scope.gotoItemsPage = function(page) { 
    $state.go('storeItems', { 
    page: page, 
    otherParam: 'Just a show off' 
    }); 
}; 

No giocherellare con la codifica necessaria e altamente leggibile!

2

è possibile creare un oggetto di parametri come:

var param = { 
    page: 2 
} 
$location.url("/store/items").search(param) 
Problemi correlati