AngularJSを使用してURLパラメーターを取得する方法


199

HTMLソースコード

<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ソースコード

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

ここでは、変数locloc1両方が上記のURLの結果としてテストを返します。これは正しい方法ですか?


1
$ routeParamsをチェックしてみてください。
Nick Heiner

ここで何を求めているのか明確ではありません... $ routeParamsと$ location#methodsのドキュメントで始めることができます
デッキ

7
投票の際は、質問を改善できるようにコメントを追加することを検討してください。ありがとう。
praveenpds 14

回答:


314

これは古い質問であることはわかっていますが、Angularのドキュメントが少ないため、これを整理するのに少し時間がかかりました。RouteProviderrouteParamsが進むべき道です。ルートはURLをコントローラー/ビューに配線し、routeParamsをコントローラーに渡すことができます。

Angularシードプロジェクトを確認してください。app.js内に、ルートプロバイダーの例があります。paramsを使用するには、次のように追加します。

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

次に、コントローラーに$ routeParamsを挿入します。

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

このアプローチでは、次のようなURLでparamsを使用できます: " http://www.example.com/view1/param1/param2 "


2
この例の最後の行があることに注意});する必要があります}]);
アンドリューやせた

44
また、クエリ文字列形式/view/1/2?other=12で 他の任意の$routeParams.other
パラメータ

私はあなたのコントローラーで 'var param1'が繰り返されていると思います。そのような単純な変更は編集できませんでした。
トム

Angularはそれをとても簡単にします、そしてあなたの答えはとても説明的です
Mohammad Kermani

1
例を割り当てて送信:var param1 = "abc"; $ location.path( '/ view1 /:' + param1); $ route.reload();
Robot70

158

ルーティングは確かにアプリケーションレベルのURL解析に適したソリューションですが$location、独自のサービスまたはコントローラーに挿入された、より低レベルのサービスを使用することもできます。

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

この単純な構文はで機能しhttp://example.com/path?myParam=paramValueます。ただし、$locationProvider以前にHTML 5モードでを設定した場合のみ:

$locationProvider.html5Mode(true);

それ以外の場合は、http: //example.com/#!/ path?myParam = someValue "Hashbang"構文を見てください。これは少し複雑ですが、古いブラウザ(HTML 5互換ではない)で作業できるという利点があります。上手。


16
$ locationProvider.html5mode(true)を次のようにモジュール構成として追加する必要があるようです:angular.module( "myApp"、[])。config(function($ locationProvider){$ locationProvider.html5Mode(true);});
sq1020 2014

4
また、html5Modeにはの<base href="http://example.com/en/" />タグが必要index.htmlです。
セスポン2015年

1
私があなたの解決策について好きなことは、オブジェクトを渡すことさえでき、それらをオブジェクトとして取得できることです。
Shilan 2015年

2
:それは、<基本>タグを追加し、このようにそれを指定しないことも可能です.config(['$locationProvider', function($locationProvider) { $locationProvider.html5Mode({ enabled: true, requireBase: false }); }])
ギヨーム

1
Angular 1.5.8では、$locationProviderこれを機能させるために構成する必要はありませんでした。 http://example.com/path#?someKey=someVal、その後 $location.search().someKey // => 'someVal'
jiminikiz 2017年

32

ngRouteを使用している場合は$routeParams、コントローラーに注入できます

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

angular-ui-routerを使用している場合は、注入できます $stateParams

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


1
以下のため$stateParamsのクエリパラメータを表示するに示したように、私は、状態を定義するときにそれらを指定する必要がありましたgithub.com/angular-ui/ui-router/wiki/...
Parziphalを

11

$ location.search()を使用してURLからパラメーターを取得する方法の解決策を見つけました

URLの最初に、この例のようにパラメーターの前に構文「#」を置く必要があります

"http://www.example.com/page#?key=value"

そしてあなたのコントローラーであなたは関数に$ locationを置き、$ location.search()を使用してURLパラメータを取得します

.controller('yourController', ['$scope', function($scope, $location) {

     var param1 = $location.search().param1; //Get parameter from URL

}]);

クエリパラメータに対して機能し、@ jeffの以下の回答はパス変数に関するものです
Abdeali Chandanwala


1
function GetURLParameter(parameter) {
        var url;
        var search;
        var parsed;
        var count;
        var loop;
        var searchPhrase;
        url = window.location.href;
        search = url.indexOf("?");
        if (search < 0) {
            return "";
        }
        searchPhrase = parameter + "=";
        parsed = url.substr(search+1).split("&");
        count = parsed.length;
        for(loop=0;loop<count;loop++) {
            if (parsed[loop].substr(0,searchPhrase.length)==searchPhrase) {
                return decodeURI(parsed[loop].substr(searchPhrase.length));
            }
        }
        return "";
    }

0

URL値を取得するシンプルで簡単な方法

First add # to url (e:g -  test.html#key=value)

url in browser (https://stackover.....king-angularjs-1-5#?brand=stackoverflow)

var url = window.location.href 

(output: url = "https://stackover.....king-angularjs-1-5#?brand=stackoverflow")

url.split('=').pop()
output "stackoverflow"

0

angularjsをexpressで使用する場合

私の例では、ルーティングを行うExpressでangularjsを使用していたため、$ routeParamsを使用するとルーティングが混乱します。私は次のコードを使用して、期待していたものを取得しました。

const getParameters = (temp, path) => {
  const parameters = {};
  const tempParts = temp.split('/');
  const pathParts = path.split('/');
  for (let i = 0; i < tempParts.length; i++) {
    const element = tempParts[i];
    if(element.startsWith(':')) {
      const key = element.substring(1,element.length);
      parameters[key] = pathParts[i];
    }
  }
  return parameters;
};

これは、URLテンプレートと指定された場所のパスを受け取ります。私はそれを次のように呼びます:

const params = getParameters('/:table/:id/visit/:place_id/on/:interval/something', $location.path()); 

それをすべてまとめると、私のコントローラーは次のとおりです。

.controller('TestController', ['$scope', function($scope, $window) {
  const getParameters = (temp, path) => {
    const parameters = {};
    const tempParts = temp.split('/');
    const pathParts = path.split('/');
    for (let i = 0; i < tempParts.length; i++) {
      const element = tempParts[i];
      if(element.startsWith(':')) {
        const key = element.substring(1,element.length);
        parameters[key] = pathParts[i];
      }
    }
    return parameters;
  };

const params = getParameters('/:table/:id/visit/:place_id/on/:interval/something', $window.location.pathname);
}]);

結果は次のようになります。

{ table: "users", id: "1", place_id: "43", interval: "week" }

これが誰かを助けることを願っています!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.