0

I'm having some trouble sending and catching events in Angular.

Consider this plunker: Plunk..

As you can see I have two controllers and a directive. The directive 'lives' in controller 1. When something happens in the directive, I want to catch this event in controller 2. As you can see in the plunk, nothing is logged to the console; the event is not catched.

I've also tried to use a service. In this scenario I created a method on the service and when this method is called, I throw the event. Just like in the Plunk, I listen for the event in Controller 2, but this also didn't work.

Where it all comes down to is that I want to invoke a method on another controller..

4

2 回答 2

2

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

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

柱塞

于 2013-07-16T13:06:16.300 回答
1

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

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

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

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

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

于 2013-07-16T15:31:17.760 回答