Safari Mobile上保存凭据提示后的Angular infdig异常

时间:2015-01-26 23:36:03

标签: angularjs mobile-safari

每次出现Safari Mobile保存凭据提示时,我都会遇到以下AngularJS异常:

[Error] Error: [$rootScope:infdig] 10 $digest() iterations reached.   Aborting!
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.10/$rootScope/infdig?p0=10&p1=%5B%5D
$digest@https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.js:14271:31
$apply@https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.js:14493:31
https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.js:21402:29
eventHandler@https://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.js:3011:25
    (anonymous function) (angular.js, line 11598)
    (anonymous function) (angular.js, line 8548)
    $apply (angular.js, line 14495)
    (anonymous function) (angular.js, line 21402)
    eventHandler (angular.js, line 3011)
[Error] Error: [$rootScope:infdig] 10 $digest() iterations reached.  Aborting! (angular.js, line 14271)
Watchers fired in the last 5 iterations: []
http://errors.angularjs.org/1.3.10/$rootScope/infdig?p0=10&p1=%5B%5D

我已经能够在这个plnkr中复制这个问题:http://plnkr.co/edit/tkGGtxGRnWrfQUprDqjb。它似乎是在Safari Mobile中实现保存凭据提示的方式的结果,因为我还没有在任何其他浏览器中看到它。此外,如果我保存凭据以便不显示提示,我不会收到错误。在异常之后页面似乎正常运行,因此,我可以捕获此异常并忽略它,但我希望那里有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

我发现避免此异常的唯一方法是在返回登录的ajax调用后重新加载页面。进行此更改还为其他浏览器密码管理器提供了更多支持,因为有些需要触发页面刷新。为了触发页面更改并从我的角度控制器中重新加载,我使用了以下代码:

$window.location.href = '#/mypage';
$window.location.reload();