为什么我的Angular事件处理程序没有被调用?

26 浏览
0 Comments

为什么我的Angular事件处理程序没有被调用?

在我的Angular 1.4.7应用程序的一个控制器中,我这样触发一个事件:

$rootScope.$broadcast('event:auth:login-finished');

然后在另一个控制器中,我尝试监听这个事件:

$scope.$on('event:auth:login-finished', function () {
  console.debug('ROOT AUTH HANDLER CALLED');
});

出于某种原因,处理程序从未被调用,尽管事件明显被触发了,我做错了什么吗?

更新

我还尝试监听根作用域:

$rootScope.$on('event:auth:login-finished', function () {
  console.debug('ROOT AUTH HANDLER CALLED');
});

但是这个也没有被调用。

0
0 Comments

问题原因:在Angular中,事件处理程序没有被调用的原因可能是因为没有正确地定义和触发事件。

解决方法:可以使用$rootScope.$on来捕捉事件。关键是要获取“根”。如果要限制作用域,可以尝试使用$rootScope.$emit或$scope.$emit,而不是$rootScope.$broadcast。如果需要更准确地诊断问题,还需要查看更多代码,确保$rootScope.$on在触发事件之前被定义(即此代码的位置应该在调用之前)。

0
0 Comments

问题出现的原因是由于控制器之间的关系。调用$broadcast将事件发送给所有子作用域。所以如果$on不在子控制器中,它就不会被触发。

将$on放在rootScope上应该起作用。

$rootScope.$on('event:auth:login-finished', function () {
  console.debug('ROOT AUTH HANDLER CALLED');
});

解决方法是将$on事件处理程序放在rootScope上。这样可以确保事件在所有子作用域中被触发。

0