Desde defineProperty ha navegador problema de compatibilidad, creo que podemos pensar en el uso de un servicio.
angular.module('myservice', [], function($provide) {
$provide.factory('msgBus', ['$rootScope', function($rootScope) {
var msgBus = {};
msgBus.emitMsg = function(msg) {
$rootScope.$emit(msg);
};
msgBus.onMsg = function(msg, scope, func) {
var unbind = $rootScope.$on(msg, func);
scope.$on('$destroy', unbind);
};
return msgBus;
}]);
});
y lo utilice en el controlador como este:
- el controlador 1
function($scope, msgBus) { $scope.sendmsg = function() { msgBus.emitMsg('somemsg') } }
- controlador de 2
function($scope, msgBus) { msgBus.onMsg('somemsg', $scope, function() { // your logic }); }