12

我在我的 AngularJS 应用程序中看到了一些非常奇怪的行为。

制作单个 $broadcast 时,(唯一的)接收器会被触发两次。

对整个应用程序的影响就好像接收器只被触发了一次。(即只有一件物品被添加到购物篮中)。

如果您触发 $broadcast 两次(即在触发 $broadcast 的按钮上单击两次),您将执行四次接收器,但有两个项目被正确添加到篮子中。

这里有一些类似电子表格的重新计算吗?$scope 函数不需要影响“普通”javascript 变量吗?

我的问题是我添加了一个alert并且它被显示了两次。


我在调试这个方面做了更多的工作:

我添加了一个计数器来计算接收到广播的次数。

如果范围(没有美元)是全球性的,我会得到加倍的结果。如果它的作用域是 Ctlr 函数的本地范围,我会得到一个非加倍的结果。

我能以某种方式创建我的控制器的两个实例吗?

我可以从萤火虫看到,从控制器完成的 $http ajax 请求只发生一次,所以我很困惑。

4

1 回答 1

23

我将首先在控制器的主体中添加一个 console.log 语句,以查看它被初始化了多少次。控制器的生命周期可能很短,因为它们与可以频繁创建和销毁的 DOM 元素相关联。

如果您使用 $routeProvider,您是否为“控制器”属性指定了一个值?如果是这样,您是否还使用“ng-controller”属性在部分中指定相同的控制器?你真的想选择一个或另一个,而不是两者,否则每次导航到该路线时都会创建两个控制器实例。

于 2012-07-25T05:08:44.027 回答