2015-04-29 7 views
6

Dato il seguente javascript:come passare il parametro di query con la funzione othwerwise

$stateProvider 
    .state('search', { 
    url: '/search?query', 
}) 
; 

$urlRouterProvider.otherwise("search"); 

Quando accedo alla pagina

base_url?query=x 

vengo reindirizzato al

base_url/Ricerca

ma il parametro di ricerca viene perso.

C'è un modo per passare il parametro di query con la funzione altrimenti?

risposta

8

C'è a working plunker

L'interfaccia utente-Router dispone soluzione nativa qui.

Il otherwise non deve essere la stringa "url", potrebbe essere una funzione.

Controlla in azione in questo Q & A:

How not to change url when show 404 error page with ui-router

Il codice potrebbe essere simile a questo:

$urlRouterProvider.otherwise(function($injector, $location){ 
    var state = $injector.get('$state'); 
    state.go("search", $location.search()); // here we get { query: ... } 
    return $location.path(); 
}); 

Il $location.search() ci darà params oggetto, che potrebbe essere come: { query: ... }. La prendiamo e reindirizzare affermare ricerca con questo params ...

Controllare lo here

+0

Non funziona per me con html5mode abilitato. Anche nel plunkr è commentato. Potresti per favore portare un esempio con html5enabled? Vengo reindirizzato due volte. Ho stampato console.log ($ posizione, $ location.path(), $ location.search()) ;. La prima volta ottengo "/" Object {vid: "Auto1"} e quindi "/" Object {} –

+1

* Non sono un fan o utente della modalità html 5, * ma qui sei la versione corretta: http: // plnkr.co/edit/yrfOXMeaCJEKt08ihw00?p=preview. In poche parole: non dimenticare di includere l'url "assoluto" corretto ... perché non stiamo vivendo in sicurezza, eseguendo il routing sicuro dopo l'hash # ... –

+0

Penso che non sia necessario scrivere return $ location.path() ;.Questo innesca un reindirizzamento di stato aggiuntivo mentre emettiamo già un reindirizzamento di stato con la funzione state.go. –

0

Non è necessario per afferrare iniettore e $ state.go, non a tutti. L'argomento del metodo otherwise può essere un percorso URL, che può contenere parametri.

Quindi nel tuo caso particolare, a seguito di codice si può portare a base_url/ricerca? Query = x

$urlRouterProvider.otherwise("/search?query=x"); 

In alternativa, l'argomento può essere una funzione che restituisce un percorso URL. Se non sei sicuro di quali parametri URL potrebbe avere, devi solo ottenere i parametri da $location quindi formattare la stringa tipo URL e restituirla.

$urlRouterProvider.otherwise(function($injector, $location) { 
    var params = $location.search() 

    // format params to 'p1=v1&p2=v2' style 
    var formatted = Object.keys(params).map(function(key) { 
     return key + '=' + params[key] 
    }).join('&') 

    return '/search?' + formatted 
});