关于$location.search
,文档说,
不带任何参数调用时,返回当前 url 的搜索部分(作为对象)。
在我的 URL 中,我的查询字符串有一个?test_user_bLzgB
没有值的参数。还$location.search()
返回一个对象。我如何获得实际文本?
关于$location.search
,文档说,
不带任何参数调用时,返回当前 url 的搜索部分(作为对象)。
在我的 URL 中,我的查询字符串有一个?test_user_bLzgB
没有值的参数。还$location.search()
返回一个对象。我如何获得实际文本?
不确定自接受的答案被接受以来它是否已经改变,但这是可能的。
$location.search()
将返回一个键值对对象,与查询字符串相同。没有值的键只是作为真存储在对象中。在这种情况下,对象将是:
{"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
如果您只需要将查询字符串视为文本,则可以使用: $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 使用的是 hashbang 策略而不是 html5 策略...要使其正常工作,请将此配置添加到您的module
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');