ngModule.run(function($rootScope) { var proto = $rootScope.constructor.prototype; var $emit = proto.$emit; var $broadcast = proto.$broadcast; proto.$emit = function(name, args) { //(a:b:c)-> [] (a) => [a] (b) => [a, a:b] (c) => [a, a:b, a:b:c] var event = $emit.call(this, name, args); var cascade = name.split(':').slice(0,-1).join(':'); event.cascade = cascade && !event.stopCascade ? this.$emit(cascade+'*', args) : false; return event; } proto.$broadcast = function(name, args) { //(a:b:c)-> [] (a) => [a] (b) => [a, a:b] (c) => [a, a:b, a:b:c] var event = $broadcast.call(this, name, args); var cascade = name.split(':').slice(0,-1).join(':'); event.cascade = cascade && !event.stopCascade ? this.$broadcast(cascade+'*', args) : false; return event; } });