次の jfiddle を検討してくださいhttp://jsfiddle.net/bchapman26/9uUBU/29/
//angular.js example for factory vs service
var app = angular.module('myApp', ['module1', 'module2']);
var service1module = angular.module('module1', []);
service1module.factory('myService', function() {
return {
sayHello: function(text) {
return "Service1 says \"Hello " + text + "\"";
},
sayGoodbye: function(text) {
return "Service1 says \"Goodbye " + text + "\"";
}
};
});
var service2module = angular.module('module2', []);
service2module.factory('myService', function() {
return {
sayHello: function(text) {
return "Service2 says \"Hello " + text + "\"";
},
sayGoodbye: function(text) {
return "Service2 says \"Goodbye " + text + "\"";
}
};
});
function HelloCtrl($scope, myService) {
$scope.fromService1 = myService.sayHello("World");
}
function GoodbyeCtrl($scope, myService) {
$scope.fromService2 = myService.sayGoodbye("World");
}
2 つのモジュール (module1 と module2) があります。module1 と module2 は両方とも、myService というサービスを定義します。これにより、両方のモジュールが myApp にインポートされると、Angular 内の myService で名前の競合が発生するようです。AngularJs は、問題の可能性を警告せずに 2 番目のサービス定義を使用しているようです。
非常に大規模なプロジェクト (または一般的にモジュールを再利用するだけ) では、名前が衝突するリスクがあり、デバッグが困難になる可能性があります。
名前の衝突が起こらないように、名前の前にモジュール名を付ける方法はありますか?