$ location.searchに関して、ドキュメントは言う、
パラメータなしで呼び出された場合、現在のURLの(オブジェクトとして)検索部分を返します。
私のURLでは、クエリ文字列に値のないパラメーター '?test_user_bLzgB'があります。また、「$ location.search()」はオブジェクトを返します。実際のテキストを取得するにはどうすればよいですか?
$ location.searchに関して、ドキュメントは言う、
パラメータなしで呼び出された場合、現在のURLの(オブジェクトとして)検索部分を返します。
私のURLでは、クエリ文字列に値のないパラメーター '?test_user_bLzgB'があります。また、「$ location.search()」はオブジェクトを返します。実際のテキストを取得するにはどうすればよいですか?
回答:
受け入れられた回答が受け入れられてから変更されたかどうかはわかりませんが、可能です。
$location.search()
クエリ文字列と同じペアであるキーと値のペアのオブジェクトを返します。値のないキーは、trueとしてオブジェクトに格納されるだけです。この場合、オブジェクトは次のようになります。
{"test_user_bLzgB": true}
この値に直接アクセスできます $location.search().test_user_bLzgB
例(クエリ文字列が大きい場合):http : //fiddle.jshell.net/TheSharpieOne/yHv2p/4/show/?test_user_bLzgB&somethingElse&also&something=Somethingelse
注:ハッシュのために(新しいフィドルを作成するhttp://fiddle.jshell.net/#/urlに移動するため)、このフィドルはjs履歴をサポートしないブラウザーでは機能しません(機能しません) IE <10)
編集:
@Nareshおよび@DavidTchepakのコメントで指摘されているように、$locationProvider
も適切に構成する必要があります:https : //code.angularjs.org/1.2.23/docs/guide/$location#-location-service-configuration
$locationProvider
/ 1.2.23 / docs / guide / …も適切に構成する必要があります(これにより問題が発生しました。リンクが他の人の時間を節約できることを願っています)
クエリ文字列をテキストとして表示するだけの場合は、次を使用できます。 $window.location.search
$location.search()
変数としてのキーとその値としての値で構成されるオブジェクトを返します。したがって、次のようにクエリ文字列を記述したとします。
?user=test_user_bLzgB
次のように簡単にテキストを取得できます。
$location.search().user
キー、?foo = barなどの値を使用しない場合は、ハッシュ#test_user_bLzgBを使用することをお勧めします。
そして呼び出す
$location.hash()
取得したいデータである「test_user_bLzgB」を返します。
追加情報:
クエリ文字列メソッドを使用し、$ location.search()で空のオブジェクトを取得している場合、おそらくAngularがhtml5の代わりにハッシュバング戦略を使用しているためです...機能させるには、この設定をモジュール
yourModule.config(['$locationProvider', function($locationProvider){
$locationProvider.html5Mode(true);
}]);
最初に、クエリ文字列を取得するためのURL形式を正しいものにします#?q = stringを使用してください
http://localhost/codeschool/index.php#?foo=abcd
$ locationサービスをコントローラーに挿入します
app.controller('MyController', [ '$location', function($location) {
var searchObject = $location.search();
// $location.search(); reutrn object
// searchObject = { foo = 'abcd' };
alert( searchObject.foo );
} ]);
したがって、出力はabcdである必要があります
これも使えます
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var queryValue = getParameterByName('test_user_bLzgB');
あなた$location.search()
が働いていない場合は、次のものがあることを確認してください:
1)html5Mode(true)
アプリのモジュール構成で構成されている
appModule.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(true);
}]);
2)<base href="https://stackoverflow.com/">
HTMLに存在する
<head>
<base href="/">
...
</head>
参照:
私のNodeJSの例では、「localhost:8080 / Lists / list1.html?x1 = y」というURLがあり、これをトラバースして値を取得します。
$ location.search()を使用してx1 = yを取得するために、いくつかのことを行いました
私のlist1.jsは
var app = angular.module('NGApp', ['ngRoute']); //dependencies : ngRoute
app.config(function ($locationProvider) { //config your locationProvider
$locationProvider.html5Mode(true).hashPrefix('');
});
app.controller('NGCtrl', function ($scope, datasvc, $location) {// inject your location service
//var val = window.location.href.toString().split('=')[1];
var val = $location.search().x1; alert(val);
$scope.xout = function () {
datasvc.out(val)
.then(function (data) {
$scope.x1 = val;
$scope.allMyStuffs = data.all;
});
};
$scope.xout();
});
そして私のlist1.htmlは
<head>
<base href=".">
</head>
<body ng-controller="NGCtrl">
<div>A<input ng-model="x1"/><br/><textarea ng-model="allMyStuffs"/></div>
<script src="../js/jquery-2.1.4.min.js"></script>
<script src="../js/jquery-ui.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/ui-bootstrap-tpls-0.14.3.min.js"></script>
<script src="list1.js"></script>
</body>
ガイド:https : //code.angularjs.org/1.2.23/docs/guide/$location
私の修正はより単純で、ファクトリーを作成し、1つの変数として実装します。例えば
angular.module('myApp', [])
// This a searchCustom factory. Copy the factory and implement in the controller
.factory("searchCustom", function($http,$log){
return {
valuesParams : function(params){
paramsResult = [];
params = params.replace('(', '').replace(')','').split("&");
for(x in params){
paramsKeyTmp = params[x].split("=");
// Si el parametro esta disponible anexamos al vector paramResult
if (paramsKeyTmp[1] !== '' && paramsKeyTmp[1] !== ' ' &&
paramsKeyTmp[1] !== null){
paramsResult.push(params[x]);
}
}
return paramsResult;
}
}
})
.controller("SearchController", function($scope, $http,$routeParams,$log,searchCustom){
$ctrl = this;
var valueParams = searchCustom.valuesParams($routeParams.value);
valueParams = valueParams.join('&');
$http({
method : "GET",
url: webservice+"q?"+valueParams
}).then( function successCallback(response){
data = response.data;
$scope.cantEncontrados = data.length;
$scope.dataSearch = data;
} , function errorCallback(response){
console.log(response.statusText);
})
})
<html>
<head>
</head>
<body ng-app="myApp">
<div ng-controller="SearchController">
<form action="#" >
<input ng-model="param1"
placeholder="param1" />
<input ng-model="param2"
placeholder="param2"/>
<!-- Implement in the html code
(param1={{param1}}¶m2={{param2}}) -> this is a one variable, the factory searchCustom split and restructure in the array params
-->
<a href="#seach/(param1={{param1}}¶m2={{param2}})">
<buttom ng-click="searchData()" >Busqueda</buttom>
</a>
</form>
</div>
</body>
$location.search()
が、私はあなたがそれを呼び出すときに得られる「オブジェクト」を確認したいと思います...