AngularJS - 当URL带有#哈希时获取URL查询参数

5

我有一个像这样的网址:

site.co/asd#antani?id=9

如何动态从该URL中获取id值,并在更改时获取新值?

我尝试了:

console.log($routeParams); 但是在控制台中得到的是Object {}

谢谢


@StarsSky 哈哈,你知道的 :D - itsme
你尝试过 $location.search() 吗?它应该返回 {id: 9} - Maxim Shoustin
@MaximShoustin 我在使用指令时,当我记录 $location.search() 时,它总是空对象 :( {} - itsme
5个回答

2

由于我不知道您的完整环境,我会按照以下方向进行:

var s = $location.search('site.co/asd#antani?id=9');

console.log(s.$$search);

输出:

Object {site.co/asd#antani?id: "9"} 

希望这些内容能有所帮助,


这是一个相当不错的解决方案,但它将我重定向到奇怪的URL,就像在循环中一样,我不知道为什么:(此外,问号被浏览器或Angular重新编码为%3F,我无法理解为什么ufff:( - itsme

2

好的,我认为我已经解决了问题,只需要更改网址

因此,为了让$routeParams起作用,我需要调用:

site.com/asd?id=9#antani

替代

site.co/asd#antani?id=9

希望这可以帮助到我,即使我不喜欢那种方式的URL:D

非常感谢大家,如果你有更好的解决方案,请告诉我!


1
正确,这是一个适当的表单。 - Maxim Shoustin
是的,我不喜欢它的外观URL,但我认为这是唯一正确的方式。 - itsme

1

我有一个要做的要点,涉及到URL参数的一些有用的功能(将URL参数转换为对象,测试URL是否具有参数,获取不带参数的哈希值以及更改URL参数)。

https://gist.github.com/dazzer13/10470514

你可以这样做:
var params = urlGetParams(url); params.id // 返回9

0
var myURL = "site.co/asd#antani?id=9";
var myURL_id = myURL.split("#")[1];

谢谢..嗯,这个相当基础,我可以解析它,只是想知道是否存在一些特定的Angular方法或方式:P - itsme

0

假设这是你正在访问的实际页面,你可以使用Angular $routeParams。像这样:

var id = $routeParams.id

抱歉,我忘了说我已经尝试过routeParams,但它总是在控制台中返回空对象{} :( 我更新了我的问题。 - itsme
嗯...你是将它注入到控制器还是服务中?$routeParams变量在控制台的全局范围内不存在,就像任何其他Angular服务一样。你需要使用依赖注入(http://docs.angularjs.org/guide/di)。 - alexsanford1
是的,我注入了$location和$routeParams,但如果我需要一些嵌套注入,我想我会避免使用它,无论如何,谢谢 :) - itsme
在指令中,将 console.log($routeParams); 返回为 Object {}。 - itsme
也许将它放到Plunkr中? - alexsanford1
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接