Javascript 角度:自定义事件处理程序的顺序&;默认处理程序

Javascript 角度:自定义事件处理程序的顺序&;默认处理程序,javascript,angularjs,event-handling,angularjs-scope,Javascript,Angularjs,Event Handling,Angularjs Scope,在我的应用程序中,我定义了一个自定义事件,我希望为其设置默认处理程序。如果任何控制器/服务想要覆盖默认处理,它们可以通过添加自己的处理程序来实现 为了实现这个场景,我在$rootScope上添加了默认处理程序&在$rootScope上广播事件。我期待着像下面这样的工作 //defined in .run block $rootScope.$on('customEvent', defaultHandler); //defined inside a controller $scope.$on('c

在我的应用程序中,我定义了一个自定义事件,我希望为其设置默认处理程序。如果任何控制器/服务想要覆盖默认处理,它们可以通过添加自己的处理程序来实现

为了实现这个场景,我在$rootScope上添加了默认处理程序&在$rootScope上广播事件。我期待着像下面这样的工作

//defined in .run block
$rootScope.$on('customEvent', defaultHandler);

//defined inside a controller
$scope.$on('customEvent', function customHandler(e){
    // handle event
    e.preventDefault();
});
我的问题是,在执行任何控制器之前执行.run块,defaultHandler总是先注册。因此,首先执行它&然后执行定制处理程序。我希望在最后执行defaultHandler


我希望避免添加我自己维护事件处理程序列表的逻辑&确保它们按所需顺序执行。有没有什么办法可以做到这一点?谢谢。

据我所知,angular中“优先级”的唯一概念来自“指令”,以及它们的编译/链接顺序


这样做的一种黑客方法是将事件处理程序放在该范围内的指令中,并按表示排序的任何优先级对它们进行排序。

在我的场景中,由于事件处理程序可能跨越视图和控制器,指令的使用是不可能的。我最终为自定义事件创建了自己的自定义事件队列。