2012-08-01 13 views
177
codice sorgente

HTMLCome ottenere i parametri URL utilizzando AngularJS

<div ng-app=""> 
    <div ng-controller="test"> 
     <div ng-address-bar browser="html5"></div> 
     <br><br> 
     $location.url() = {{$location.url()}}<br> 
     $location.search() = {{$location.search('keyword')}}<br> 
     $location.hash() = {{$location.hash()}}<br>  
     keyword valus is={{loc}} and ={{loc1}} 
    </div> 
</div> 

AngularJS codice sorgente

<script> 
function test($scope, $location) { 
    $scope.$location = $location; 
    $scope.ur = $scope.$location.url('www.html.com/x.html?keyword=test#/x/u'); 
    $scope.loc1 = $scope.$location.search().keyword ;  
    if($location.url().indexOf('keyword') > -1){  
     $scope.loc= $location.url().split('=')[1]; 
     $scope.loc = $scope.loc.split("#")[0]   
    } 
    } 
</script> 

Qui le variabili loc e loc1 entrambi restituiscono prova come risultato per l'URL sopra. È questo il modo corretto?

+1

Si consiglia di controllare [$ routeParams] (http://docs.angularjs.org/api/ng.$routeParams). –

+0

Non è chiaro cosa stai chiedendo qui ... i $ routeParams e $ location # metodi doc dovrebbero farti iniziare – deck

+7

Ti preghiamo di considerare l'aggiunta di un commento al momento del voto basso in modo che la domanda possa essere migliorata. Grazie. – praveenpds

risposta

290

So che questa è una vecchia domanda, ma mi ci è voluto un po 'di tempo per sistemare questo dato la documentazione angolare sparsa. Il RouteProvider e routeParams è la strada da percorrere. Il percorso collega l'URL al tuo Controller/View e il routeParams può essere passato al controller.

Verificare il progetto Angular seed. All'interno dell'app.js troverai un esempio per il provider del percorso. Per utilizzare params semplicemente aggiungere in questo modo:

$routeProvider.when('/view1/:param1/:param2', { 
    templateUrl: 'partials/partial1.html',  
    controller: 'MyCtrl1' 
}); 

Poi nel controller iniettare routeParams:

.controller('MyCtrl1', ['$scope','$routeParams', function($scope, $routeParams) { 
    var param1 = $routeParams.param1; 
    var param2 = $routeParams.param2; 
    ... 
}]); 
+2

Nota che l'ultima riga di questo esempio '' '});' '' dovrebbe essere '' '}]);' '' –

+39

Puoi anche ottenere altri parametri arbitrari nella forma stringa di query '/ view/1/2? altro = 12' con '$ routeParams.other' – DavidC

+0

Penso che tu abbia il 'var param1' ripetuto nel tuo controller. Non ho potuto modificare un cambiamento così semplice. – Tom

142

Mentre il routing è davvero una buona soluzione per l'analisi a livello di applicazione URL, si consiglia di utilizzare il basso livello $location servizio più, come iniettato nel vostro servizio o il controller:

var paramValue = $location.search().myParam; 

Questo semplice sintassi funzionerà per http://example.com/path?myParam=paramValue. Tuttavia, solo se è stato configurato il $locationProvider in modalità HTML 5 prima:

$locationProvider.html5Mode(true); 

hanno Altrimenti uno sguardo alla sintassi http://example.com/#!/path?myParam=someValue "Hashbang" che è un po 'più complicato, ma hanno il vantaggio di lavorare su vecchi browser (non compatibile con HTML 5).

+13

sembra che tu debba aggiungere $ locationProvider.html5mode (true) come una configurazione del modulo in questo modo: angular.module ("myApp", []). config (funzione ($ locationProvider) { $ locationProvider.html5Mode (true); }); – sq1020

+4

E html5Mode richiede un tag '' nel tuo 'index.html'. – cespon

+1

quello che mi piace della tua soluzione è che puoi anche passare oggetti e li ottieni come oggetto. – Shilan

27

Se stai usando ngRoute, è possibile iniettare $routeParams nel controller

http://docs.angularjs.org/api/ngRoute/service/$routeParams

Se stai usando angolare-ui-router, è possibile iniettare $stateParams

https://github.com/angular-ui/ui-router/wiki/URL-Routing

+1

Per '$ stateParams' per mostrare i parametri di query, Ho dovuto specificarli durante la definizione degli stati, come mostrato in https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters – Parziphal

1

Se le risposte già pubblicate non sono d'aiuto, si può provare con $ location.search(). MyParam; con URL http://example.domain#?myParam=paramValue

+0

Questa è la seconda soluzione più votata qui ... E pubblicato 3 anni prima di questo ... https://stackoverflow.com/a/19481865/3578036 – JustCarty

Problemi correlati