2013-04-28 6 views
12

Come si può leggere un parametro da un URL all'interno di un controller AngularJS?AngularJS: leggere il parametro del percorso dal controller

Diciamo che ho un URL come http://localhost/var/:value e voglio che il valore sia memorizzato in una variabile all'interno del controller per l'URL /var/:value.

Ho provato a utilizzare $routeParams.value e $route.current.params.value ma $routeParams non è definito all'inizio e $route non funziona.

+0

Cosa intendi per "$ routeParams non è definito all'inizio e $ route non funziona"? Potresti condividere il codice dove hai provato a farli funzionare? Sia $ route.current che $ routeParams dovrebbero fornire risultati corretti in un provider di controller in cui sono stati impostati percorsi e dipendenze iniettate in un controller. –

risposta

15

Il problema è che probabilmente si inietta $routeParams o $route in un controller eseguito prima che si verifichi una modifica della route, ad es. il tuo controller principale/principale/pagina.

Se si immette $routeParams in un controller per un percorso specifico (specificato dalla proprietà controller quando si definisce il percorso), quindi funzionerà, altrimenti probabilmente è meglio ascoltare i vari eventi delle trasmissioni del servizio di instradamento.

tenta di modificare il codice per utilizzare

$scope.$on('$routeChangeSuccess', function (ev, current, prev) { 
    // ... 
}); 
+1

Hai perfettamente ragione, il controller viene eseguito prima che si verifichi una modifica della route perché il client chiama direttamente l'URL durante la connessione. Ma il codice inviato non funziona perché non è previsto alcun cambio di rotta. Qualche altro suggerimento per risolvere questo problema? – ctitze

+3

Se i tuoi clienti eseguono direttamente l'url senza che AngularJS gestisca il routing, non sarai in grado di utilizzare '$ routeParams'. '$ routeParams' funziona solo se stai usando' $ routeProvider.when (/ movies /: genere, {...}) ', altrimenti devi estrarre i valori manualmente. Domanda: stai utilizzando il routing AngularJS o stai semplicemente cercando un modo per estrarre i valori dall'URL? – Martin

+0

Sto usando AngularJS per il routing perché voglio caricare diversi 'templateUrls' nella mia' ng-view' (angular-express-seed). Ma grazie per la risposta, sembra che ho bisogno di risolvere il mio problema con un approccio diverso. – ctitze

3

Requisiti: Assicurare 'ngRoute' è nel vostro modulo di applicazione

Route provider set up as: http://localhost/var/:valName 

Funzione impostato come:

function functionName($scope, $routeParams){$scope.value = $routeParams.valName;} 

HTML vista :

{{value['valName']}}