【问题标题】:AngularJS can a $on method be called more than once for a single $broadcast?AngularJS 可以为单个 $broadcast 多次调用 $on 方法吗?
【发布时间】:2012-07-21 11:48:12
【问题描述】:

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

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

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

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

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

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


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

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

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

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

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

【问题讨论】:

标签: broadcast angularjs


【解决方案1】:

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

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

【讨论】:

  • 我想就是这样 - 我从 ng-controller 移动到 $routeProvider 并没有意识到当我将页面剪切并粘贴到部分时我需要删除 ng-controller .我会在这个周末检查,然后接受答案。
猜你喜欢
  • 2011-04-02
  • 2015-09-07
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多