【发布时间】:2014-07-09 20:46:52
【问题描述】:
我目前正在编写一些带有延迟加载内容 + 控制器的代码。我的代码基本上像this fiddle 一样工作。但是,由于某种原因,我的版本不起作用,而是每当 Angular 尝试更新它的视图时,我都会得到 an infinite digest cycle。
当我从这个简单的重复语句中删除 ng-include 时,问题就消失了:
<div class="container" ng-repeat="pageName in pageNames">
<div ng-include="pageName"></div>
</div>
最奇怪的部分:即使pageNames 从未分配给范围,exact same error 也会出现。两个范围(外部和内部控制器的范围 - 我都有一个)可以完全为空(我检查了 Batarang - 我只有两个空范围),我仍然得到错误。
我的代码有点太复杂了,有太多其他的依赖,所以在这里发布它是没有意义的。它最纯粹的版本是上面的小提琴。我找不到两者之间的逻辑差异。当我用 Batarang 检查我的瞄准镜时,我也没有发现任何可疑之处:
- 我没有在我的作用域中使用函数
- 我没有使用
$watch - 我没有使用
ng-model
我的结论是我并没有明确地改变任何东西,所以它一定是 angular 引擎盖下的东西。
我能否以某种方式让 Angular 或 Batarang 告诉我在摘要迭代后哪些范围变量发生了变化,以便我确定导致无限循环的罪魁祸首?
更新:
我终于发现history.pushState 搞砸了一切。我现在正在寻找替代方案,例如$location 服务。尽管如此,我仍然想知道如何调试这类问题。有什么提示吗?
【问题讨论】:
-
有什么原因为什么你不能在你的开发环境中使用一个未缩小版本的 angularjs 而只是在它的 digest() 函数中设置一个断点?
-
将开发工具设置为中断所有异常,包括捕获的异常。如果您对缩小代码感到困惑,请删除缩小或漂亮地打印 javascript。
标签: javascript angularjs angularjs-ng-repeat angularjs-ng-include