Angularjsでクエリパラメータを使用してURLを作成する方法。
APIが表示されます $ location.search()
問題は、$ location(url)がURLにリダイレクトすることです。私の場合、クエリパラメータのurlとkey:valueのペアを渡し、URLを作成します。何かのようなもの
url:/a/b/c
params:{field1: value1, field2: value2}
結果:/a/b/c?field1=value1&field2=value2
このURLをリンクに使用するのが好きです。 angularエンコード?
、&
文字も見ました。これを回避できますか?
私の意図は、アンカー要素のhrefとしてURLを使用することでした。私はリクエストを送信するために$ httpを使用しますが、時々(現在のオブジェクトに基づいて)クエリパラメーターを使用してリンクを提供する必要があります
ありがとう
1.4+の時点でニースのソリューションがあります。 $httpParamSerializer
を使用して、パラメータオブジェクトからクエリ文字列を作成できます。
var qs = $httpParamSerializer(params);
次の規則に従ってオブジェクトを文字列に変換するデフォルトの$ http paramsシリアライザー:
{'foo': 'bar'} results in foo=bar
{'foo': Date.now()} results in foo=2015-04-01T09%3A50%3A49.262Z (toISOString() and encoded representation of a Date object)
{'foo': ['bar', 'baz']} results in foo=bar&foo=baz (repeated key for each array element)
{'foo': {'bar':'baz'}} results in foo=%7B%22bar%22%3A%22baz%22%7D" (stringified and encoded representation of an object)
Note that serializer will sort the request parameters alphabetically.
AngularはbuildUrl()
関数を内部的に使用して、パラメーターのオブジェクトからクエリ文字列を作成します。現時点では、eval()
マジックを実行したい場合を除き、$HttpProvider
に対してプライベートであるため、コードで使用することはできません。
Githubの関連問題:
あなたは本当に間違ったツリーをbarっているように信じています... $ http.get(url、config)または$ http.post(url、data、config)を提供する$ httpサービスを調べる必要があります。パラメータ付きのGETリクエストについては、次のSOを参照してください
$ httpとその仕組みについては、Angularのドキュメントをご覧ください。
http://docs.angularjs.org/api/ng.$http
おそらく私は目標を誤解しているので、実際には別の場所に移動したいのです。ここで提案するのは、バックグラウンドでリクエストを行うことです(AJAXスタイル)。
JS
angular.module("myApp", []).controller("MyCtrl", ["$scope", "$window", function($scope, $window) {
$scope.goPlaces = function(url, parameter) {
$window.open("http://www."+url+"?q="+parameter);
//$window.open("http://www."+url+"?q="+parameter, "_self");
//$window.open("http://www."+url+"?q="+parameter, "_top");
};
}])
HTML
<div ng-app="myApp" ng-controller="MyCtrl">
<a href="#" ng-click="goPlaces('google.com','Shaun Husain')">Find me</a>
</div>
これはあなたのケースで機能しますか?
アンギュラーの内部および外部URLのフォーマットルールはわずかに異なります。
$ locationは、独自のアプリケーション内で内部ルートをアクティブ化する手段です。
外部リンクの場合、$ httpが必要です。
内部リンクの場合、ハッシュ/バング構文を確認する価値があるかもしれません。