2012-11-29 37 views
13

Ho diversi percorsi diversi, ma contengono parametri simili.
Esempio:

when '/user/:accountId/charts/:chartType', controller:ChartsController 
when '/manager/:accountId/charts/:chartType', controller:ChartsController 
when '/whatever/pathy/paththingy/charts/:chartType', controller:ChartsController 

Avviso tutte e tre le viste utilizzare il controller stesso Grafici per controllare la vista. È un controller abbastanza generico ma ha bisogno di passare tra i chartTypes disponibili ... mantenendo il resto del percorso.
Esempio: (QUESTO NON FUNZIONA)

if my currrent url is '/user/001/charts/comparison' 
Then I call something like: 
$route.current.params.chartType = 'newChart'; 
$route.reload(); // or soemthing similar? 
I want the url to become '/user/001/charts/newChart' 

Qualcuno ha qualche idea di come aggiornare facilmente i parametri di un percorso senza completamente ri-typeing o ricostruire il percorso di percorso?

risposta

10

Se possibile, ti consigliamo di utilizzare ui-router. È più potente di ngRoute in molti aspetti.

Essenzialmente, questo modulo ha un concetto chiamato livello superiore stato avvolgendo il percorso sottostante che scudi voi di lavorare direttamente con basso livello della via come URL rotta.

Per un confronto: What is the difference between angular-route and angular-ui-router?

Con ui-router, è possibile implementare il codice come questo:

$stateProvider 
    .state('user.chart', { 
    url: '/user/:accountId/charts/:chartType', 
    controller: "ChartsController" 
    }) 
.state('manager.chart', { 
    url: '/manager/:accountId/charts/:chartType', 
    controller: "ChartsController" 
    }) 
.state('pathy.chart', { 
    url: '/whatever/pathy/paththingy/charts/:chartType', 
    controller: "ChartsController" 
    }) 

E si potrebbe utilizzare questo codice per navigare tra gli stati:

$state.go('user.chart',{chartType:'newChart'},{inherit:true}); 

Documentation

-1

Leggi l'ang docs Ular su $location.search()

Considerando l'URL è una richiesta GET, e ha alcuni parametri

È possibile ottenere i parametri in tuo URL con questo metodo

/user/001/charts/?chartType=comparison 

var searchObject = $location.search(); 
// => { chartType : 'comparison' } 

Ora modificare il valore di chartType

Questo cambierà il parametro nell'URL su

/user/001/charts/?chartType=newChart 
+0

Questo non funzionerebbe su uno schema URL non banale, come '/ posts /: post/commenti /: commento'. Se si fosse in '/ posts/1/comment/1' e si volesse andare al commento 2, si sarebbe invece reindirizzati a postare 2 o post 2 e commentare 2 – jackweirdy

10

Dal momento angolare 1.3 è possibile utilizzare per cambiare $route.updateParams(newParams) params percorso.

Here is a quote from the angular docs...

$ percorso.updateParams (newParams);

Provoca $route servizio per aggiornare l'URL corrente, sostituendo parametri di percorso attuali e quelli indicati in newParams. I nomi di proprietà che corrispondono al percorso del percorso definizioni di segmento verranno interpolati nel percorso della posizione, mentre le proprietà rimanenti verranno trattate come parametri di query.

+1

Grazie jackweirdy per l'implementazione di questa funzione! non ho notato che sei qui ... –

Problemi correlati