如何捕获Angular中指令抛出的控制器中的事件?

时间:2013-07-16 12:40:22

标签: angularjs angularjs-directive angularjs-scope

我在Angular中发送和捕获事件时遇到了一些麻烦。

考虑这个问题:Plunk..

如你所见,我有两个控制器和一个指令。指令'生活'在控制器1中。当指令中发生某些事情时,我想在控制器2中捕获此事件。正如您在插件中看到的那样,没有任何内容记录到控制台;事件没有被抓住。

我也尝试过使用某项服务。在这种情况下,我在服务上创建了一个方法,当调用此方法时,我抛出事件。就像在Plunk中一样,我在Controller 2中监听事件,但这也没有用。

归根结底是我想在另一个控制器上调用一个方法..

2 个答案:

答案 0 :(得分:2)

在您的Plunker中,第二个控制器(SecondController)已注册,但它从未实际初始化。这就是为什么你的听众从不记录事件的原因。

目前尚不清楚使用第二个控制器的方式,地点和时间,但如果使用ng-view(通过路由)或ng-controller进行初始化,则其监听器将观察事件。

PLUNKER

答案 1 :(得分:1)

每次访问路径时,都会(重新)创建关联的控制器(和$ scope)。

由于您提到Controller 2与路由相关联,因此只有在您访问该路由时才会存在(如@Ajay和@Stewie已提到的那样),因此您无法在该控制器中捕获事件。

我建议您使用一些API /方法创建服务,以执行以下操作:

  • 记录触发的事件
  • 检查是否触发了事件
  • 清除事件

您的指令会调用该方法来记录触发器。 您的Controller 2会在创建时调用check方法(如果找到触发器集,则可能会调用clear方法)。