在不同的文件中将服务注入控制器

时间:2014-12-26 05:50:10

标签: javascript angularjs cordova

我在storage.js文件中有这个控制器和服务:

angular.module('app', []).

    controller('storageController', ['$scope', 'storage', function ($scope, storage) {
                                    $scope.loadProducts = function() {
                                        storage.loadProducts();
                                    };
                                    $scope.saveProducts = function(json) {
                                        storage.saveProducts(json);
                                    };
                                }])
    .service('storage', [function() {
                        this.loadProducts = function loadProducts() {
                            plugincoredata.loadProducts(function(success) {
                                    alert('SUCCESS: ' + success);
                                },
                                function(error) {
                                    alert('ERROR: ' + error);
                                }
                            );

                        };
                        this.saveProducts = function saveProducts(json) {
                            bancacoredata.saveProducts(function(success) {
                                    alert('SUCCESS: ' + success);
                                },
                                function(error) {
                                    alert('ERROR: ' + error);
                                },
                                json
                            );
                        };
                       }]);

然后我有一个我试图在utils.js文件中创建的utils服务:

    angular.module('app', [])
    .service('utils', [function() {
                       var amICordova = null;
                       this.isCordova = function isCordova() {
                            if (amICordova == null) {
                                amICordova = lastIndexOf('http://', 0) !== 0 && lastIndexOf('https://', 0) !== 0;
                            }
                            return amICordova;
                       };
    }]);

我想将此服务注入控制器,以便在使用本机SQLite或IndexedDB保存数据之前,我可以确定webapp是作为cordova应用程序还是普通Web浏览器运行。我尝试使用controller('storageController', ['$scope', 'storage', 'utils', function ($scope, storage, 'utils'),但我收到了错误

  

错误:[$ injector:unpr] http://errors.angularjs.org/1.2.28/ $ injector / unpr?p0 = utilsProvider%20%3C-%20utils

如何将此服务注入控制器?

2 个答案:

答案 0 :(得分:4)

utils.js文件中,您应该设置其他模块名称。(如公共资源)

angular.module('commons', [])
.service('utils', [function() {
   ...
}]);

storage.js文件中:加载公共模块。

angular.module('app', ['commons'])
.controller('storageController', ['$scope', 'storage', 'utils', function ($scope, storage, utils){
...
}]);

答案 1 :(得分:1)

如果您不想要任何常用模块,可以像这样定义您的服务:

var app = angular.module('app',[]);//creating module

app.service('utils', [function() { /*insert your code here*/ }]);

使用此格式将确保您不会错误地重新创建模块。 然后在您的控制器中,您可以注入以下服务:

app.controller('storageController', ['$scope', 'storage', 'utils', function ($scope, storage, utils) { /*controller code here*/ }]);