2012-08-01 9 views
177

HTML-Quellcodewie der URL-Parameter erhalten 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 Quellcode

<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> 

Hier werden die Variablen loc und loc1 beide Rück Test als Ergebnis für die oben genannte URL. Ist das der richtige Weg?

+1

Sie können [$ routeParams] (http://docs.angularjs.org/api/ng.$routeParams) überprüfen. –

+0

Nicht klar, was Sie hier fragen ... die Methoden $ routeParams und $ location # methods sollten Ihnen den Einstieg erleichtern – deck

+7

Bitte denken Sie daran, einen Kommentar hinzuzufügen, wenn Sie abstimmen, damit die Frage verbessert werden kann. Vielen Dank. – praveenpds

Antwort

290

Ich weiß, dass dies eine alte Frage ist, aber ich brauchte einige Zeit, um dies zu klären, da die Dokumentation spärlich ist. Der RouteProvider und routeParams ist der Weg zu gehen. Die Route verbindet die URL zu Ihrem Controller/View und die routeParams können an den Controller übergeben werden.

Überprüfen Sie das Projekt Angular seed. In der app.js finden Sie ein Beispiel für den Routenanbieter. Um params verwenden sie einfach wie folgt anhängen:

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

Dann in Ihrem Controller inject $ routeParams:

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

Beachten Sie, dass die letzte Zeile dieses Beispiels ''}); '' '' '' '] sein sollte;' '' –

+39

Kann auch andere willkürliche Parameter in der Abfragezeichenfolge '/ view/1/2? andere = 12' mit '$ routeParams.other' – DavidC

+0

Ich denke, Sie haben die 'var param1' in Ihrem Controller wiederholt. Ich konnte so eine einfache Änderung nicht bearbeiten. – Tom

142

Während Routing ist in der Tat eine gute Lösung für Application-Level-URL-Analyse, können Sie verwenden möchten die mehr Low-Level-$location Service, wie in Ihrem eigenen Service oder Controller injiziert:

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

Diese einfache Syntax für http://example.com/path?myParam=paramValue arbeiten. Allerdings nur, wenn Sie die $locationProvider in dem HTML-5-Modus konfigurieren vor:

$locationProvider.html5Mode(true); 

Ansonsten haben einen Blick auf die http://example.com/#!/path?myParam=someValue „Hashbang“ Syntax, die ein bisschen komplizierter ist, aber den Vorteil der Arbeit an alten Browsern (Nicht-HTML-5-kompatibel).

+13

Es scheint, als ob Sie $ locationProvider.html5mode (true) als eine Modulkonfiguration wie folgt hinzufügen müssen: angular.module ("myApp", []). config (Funktion ($ locationProvider) { $ locationProvider.html5Mode (true); }); – sq1020

+4

Und html5Mode erfordert ein '' Tag in Ihrer 'index.html'. – cespon

+1

Was ich an Ihrer Lösung mag, ist, dass Sie sogar Objekte übergeben können, und Sie erhalten sie als Objekt. – Shilan

27

Wenn Sie ngRoute verwenden, können Sie $routeParams in Ihrem Controller injizieren

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

Wenn Sie Winkel-ui-Router verwenden, können Sie $stateParams

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

injizieren
+1

Für' $ stateParams' Abfrageparameter zu zeigen, Ich musste sie bei der Definition der Zustände angeben, wie in https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters gezeigt – Parziphal

1

Wenn die bereits geposteten Antworten nicht geholfen haben, kann man versuchen mit $ location.search(). MyParam; mit URLs http://example.domain#?myParam=paramValue

+0

Das ist die zweithöchste gewählte Lösung hier ... Und posted 3 Jahre vor diesem ... https://stackoverflow.com/a/19481865/3578036 – JustCarty

Verwandte Themen