angularjs: module names conflict

A sample to demonstrate last wins approach and shortcoming of angularjs module resolution

by miensol

JavaScript

var A = angular.module('A', []);

A.factory('serviceA', function(){
	return function(){
		console.log('using serviceA defined in module A');
	};
});

var B = angular.module('B', ['A']);

B.factory('serviceB', function(serviceA){
	return function(){
		console.group('using serviceB defined in module B');
		serviceA();
		console.groupEnd();
	};
});

var C = angular.module('C', ['A']);

C.factory('serviceA', function(){
	return function(){
		console.log('using serviceA defined in module C');
	};
});

C.factory('serviceC', function(serviceA){
	return function(){
		console.group('using serviceC defined in module C');
		serviceA();
		console.groupEnd();
	};
});

var $injector = angular.injector(['A','B','C']);
$injector.invoke(function(serviceA, serviceB, serviceC){
    serviceA();
    serviceB();
    serviceC();
});