$ location.search()的任何方式可以在导航到新URL时重置或清除?

时间:2018-01-30 13:29:55

标签: angularjs

浏览完文档后,我想我已经错过了一个让我失望的概念。在AngularJS中,$ location.search()返回一个getter / setter,它使我能够操作AngularJS搜索“查询字符串” - 即#!...之后的URL部分? (在“hash-bang模式”中)。似乎很容易。

假设我导航到我操纵过这个页面的#!/budgets页面;例如:

vm.filterOptions = $location.search();
vm.filterOptions.status = vm.filterOptions.status || "active";

现在,filterOptions.status将有一个值,$ location.search()。status将具有相同的值。

我认为位置栏中的URL在此时没有变化,因此我们有$ location.search()的内容与位置栏中的URL不匹配。我需要调用$ location.search($ location.search())或类似的实际触发位置更改。很好,但是这个行为是在某个地方拼写出来的吗?

然后,如果我再点击普通链接,例如<a href="#!/products">,则$ location.search()的内容将保留,即使新网址在搜索中没有任何内容。此外,如果我点击包含搜索字词的链接(例如<a href="#!/products?foo=bar">),除了新属性{{1}之外,$ location>的内容仍会保留 }显示在URL中。这让我觉得很奇怪,虽然我可以看到foo<a href="...实际上在哪里操纵URL,所以我很可能有理由错过。你能救我一下吗?

是否有设置或更好的方法让AngularJS $ location.search()重置或清除新网址导航到时,尤其是通过普通的$location.search()...链接?我错过了什么?

1 个答案:

答案 0 :(得分:0)

虽然我仍然对于$location.search()链接上保留<a href="#...">上的属性的原因感到困惑,但我认为我找到了解决方案。

而不是操纵$location.search()的属性,我正在通过var terms = angular.copy($location.search());操纵它的副本。然后,当我想要使其生效时,我打电话$location.search(terms);。此类修改<{>> <a href="#...">个链接中进行。我仍然对为什么$location.search()的{​​{1}}属性的编辑在<a href="#...">链接中进行编辑感到困惑,但至少我有一个很好的解决方案。