我似乎在stringify中遇到了问题,然后从网址对象中提取
我只是将我的对象字符串化并设置位置(使用angulars $ location),如此
currentUrl = {"module1" : {"is" : true} }
$location.search(JSON.stringify(currentUrl));
所以这解析到网址就好了,但是当我尝试从网址抓取它时我得到了回来
console.log($location.search());
---
Object {{"module1":{"is":true}}: true}
如何将其解析回对象以便我可以使用它?如果我做
JSON.parse($location.search());
我收到语法错误。我可能是因为搜索如何返回对象?我在这里有点困惑,可以使用一些帮助。谢谢!
所以我把它放在了
的网址中 $location.search(JSON.stringify(currentUrl));
我需要采取哪些步骤才能恢复到这种形式:
{"module1" : {"is" : true} }
编辑 -
它似乎只是将json对象设置为
之类的位置的键 { "mystrigifiedobject": true }
Edit2:
基于第一次编辑,我能够解决它(将其设置在位置对象键中),如下所示:
currentUrl = $location.search();
currentUrl = JSON.parse(Object.keys(currentUrl));
console.log(currentUrl);
这只是感觉有点奇怪,我在这里做错了吗?
答案 0 :(得分:1)
$ location.search()将url路径中已解析的搜索项作为对象返回。这意味着这种网址:
?a=b&c=d
将导致此对象:
{ a: 'b', c: 'd' }
调用此功能时:
currentUrl = {"module1" : {"is" : true} }
$location.search(JSON.stringify(currentUrl));
您的路径将如下所示:
?%7B%22module1%22:%7B%22is%22:true%7D%7D
并且从$location.search
返回的已解析对象将如下所示:
{{"module1":{"is":true}}: true}
这不是一个带有一个条目的对象,而键是你的JSON
所以,为了让你的对象回来你需要做的是:
var parsedObject = $location.search();
var yourObject = JSON.parse(Object.keys(parsedObject)[0]);
看到这个jsfiddle:http://jsfiddle.net/HB7LU/11633/
但请注意:在将字符串放入网址时,您应对其进行编码:
$location.search(encodeURIComponent(JSON.stringify(currentUrl)));
答案 1 :(得分:0)
$routeParams
提供对路由模板值和查询字符串值的访问(作为字符串)。
function ctrl($routeParams) {
var yourValueAsString = $routeParams.yourKey;
}
function ctrl2($location) {
$location.search('yourKey', JSON.stringify(...));
}
更好的选择是切换到使用UI路由器来更好地处理这个问题。