【发布时间】:2012-07-21 11:48:12
【问题描述】:
我在我的 AngularJS 应用程序中看到一些非常奇怪的行为。
当制作一个 $broadcast 时,(唯一的)接收器会被触发两次。
对整个应用程序的影响就像接收器只被触发一次。 (即只有一件物品被添加到购物篮中)。
如果您触发 $broadcast 两次(即在触发 $broadcast 的按钮上单击两次),您将执行四次接收器,但有两个项目被正确添加到篮子中。
这里是否进行了一些类似电子表格的重新计算? $scope 函数不需要影响“普通”javascript 变量吗?
我的问题是我添加了一个alert,它被显示了两次。
我在调试这个方面做了更多的工作:
我添加了一个计数器,用于计算接收到广播的次数。
如果范围(没有美元)是全局的,我会得到加倍的结果。如果它的作用域是 Ctlr 函数的本地范围,我会得到一个非双倍的结果。
我能以某种方式创建我的控制器的两个实例吗?
我可以从firebug中看到,控制器完成的$http ajax请求只发生一次,所以我很困惑。
【问题讨论】:
-
如果您还没有尝试过,请查看 AngularJS Batarang Chrome 扩展程序以进行故障排除 (github.com/angular/angularjs-batarang),以防嵌套范围造成一些混乱。