49

次の 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 番目のサービス定義を使用しているようです。

非常に大規模なプロジェクト (または一般的にモジュールを再利用するだけ) では、名前が衝突するリスクがあり、デバッグが困難になる可能性があります。

名前の衝突が起こらないように、名前の前にモジュール名を付ける方法はありますか?

4

4 に答える 4

-8

サービスの元になるモジュールでコントローラーを定義します。

service2Module.controller("ServiceTwoCtrl", function(myService, $scope) {});

于 2012-11-16T00:00:45.857 に答える