【问题标题】:Using history.pushState in Angular results in "10 $digest() iterations reached. Aborting!" error在 Angular 中使用 history.pushState 会导致“达到 10 个 $digest() 迭代。中止!”错误
【发布时间】:2013-12-18 13:26:12
【问题描述】:

我正在尝试将我的应用程序中的 url 从“http://www.test.com/foo”更改为“http://www.test.com/bar+someVariable(某些变量是我从 bar 控制器内的 http 请求收到的字符串) history.pushState() 。在我的路线中,我启用了 html5mode 并且一切正常。我还使用 location.path() 按照文档中的说明在视图和控制器之间切换。现在,一旦应用程序切换视图和控制器,我将 history.pushState(null,null,"/bar"+somevariable) 添加到“/bar”的控制器。一切正常,并且 url 已更新,但在控制台中我收到“已达到 10 个 $digest() 迭代。中止!”错误。我怀疑激活 history.pushState 函数会以某种方式干扰 angular 的 $location 或 $route 服务。

在没有收到 $digest 错误的情况下,在 Angular 中使用 history.pushState() 的正确方法是什么?

顺便说一下,我使用的是 angular 1.0.3

谢谢你, 吉顿

【问题讨论】:

  • 当我使用动态包含和动态添加的控制器做一些花哨的事情时,我遇到了同样的问题。尽管一切正常,但我一使用,pushState 一切都搞砸了。

标签: html angularjs url pushstate


【解决方案1】:

改变路径
$location.path('/newValue')

见:http://docs.angularjs.org/guide/dev_guide.services.$location

【讨论】:

  • 嗨 oori,我已经在使用 $location.path()。我正在尝试在重新路由后将路径的 url 更改为新的。例如,使用您提供的内容,我想将应用程序路由到 /newValue,但在 url 中我想查看 /newValue/someVariable,并且还可以选择根据从服务器接收到的数据更改 someVariable。你知道如何实现吗?
  • 我不完全确定我得到你的要求,也许你可以为那个例子做一个简单的 jsfiddle/plunkr?我的意思是,如果 url 设置为 /x,然后设置为 /x/y,那么它自然会由 Angular 路由,并且 $routeProvider 会启动。你可以在那里捕获这些路由,然后停止/操作它。
【解决方案2】:

如果没有查看相关来源,很难确定,但这是旧版本 IE(我认为主要是 8 和 9)中的常见问题。几周前我遇到这种情况时对我有用的解决方案(如果您使用的是 IE,可能对您有用)正在更改我的导航中的锚标记。

我有:

<a href="#"></a>

解决了什么问题:

<a href=""></a>

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 2015-05-30
    • 2015-12-15
    • 2012-11-30
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多