Only two methods: .broadcast() and .on(), without native upwards(broadcast)/downwards(emit) logic and scope mess.
Works great with Angular 1.6.*, should work with lower versions as well.
npm install angular-events --save
<script src="node_modules/ng-events/dist/ng-events.min.js">
Be sure path to node_modules is correct
angular.module('yourApp', ['ngEvents']);
angular.module('yourApp').factory('Service1', ['$events', function($events) {
$events.broadcast('SOMETHING_HAPPENED');
}]);
angular.module('yourApp').factory('Service2', ['$events', function($events) {
$events.on('SOMETHING_HAPPENED', function() {
console.log('Something happened, got it!');
})
}]);
You can also pass data when broadcasting:
$events.broadcast('SOMETHING_HAPPENED', {info: 'some info'});
and get it:
$events.on('SOMETHING_HAPPENED', function(data) {
console.log('Something happened, got it! And here is what we know: ' + data.info);
});
$events.on(['SOMETHING_HAPPENED', 'SOMETHING_ANOTHER_HAPPENED'], function() {
console.log('We know that something or something another happened. And it should not bother us that we do not know which specific event was fired (by design means)!');
});
$events.on('SOMETHING_HAPPENED', function ()
{
console.log('this will have default priority 500');
});
$events.on('SOMETHING_HAPPENED', function ()
{
console.log('this will have priority 1000');
}, 1000);
$events.on('SOMETHING_HAPPENED', function ()
{
console.log('this will have priority 1001 (because push is used)');
});
$events.on('SOMETHING_HAPPENED', function ()
{
console.log('this should be shown second and...');
}, 20);
$events.on('SOMETHING_HAPPENED', function ()
{
console.log('This should be shown first and...');
}, 10);