Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在不同文件中向控制器注入服务_Javascript_Angularjs_Cordova - Fatal编程技术网

Javascript 在不同文件中向控制器注入服务

Javascript 在不同文件中向控制器注入服务,javascript,angularjs,cordova,Javascript,Angularjs,Cordova,我在storage.js文件中有此控制器和服务: angular.module('app', []). controller('storageController', ['$scope', 'storage', function ($scope, storage) { $scope.loadProducts = function() {

我在
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
                            );
                        };
                       }]);
    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;
                       };
    }]);
然后我在
utils.js
文件中创建了这个utils服务:

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
                            );
                        };
                       }]);
    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',函数($scope,storage,'utils')
,但出现了一个错误

错误:[$injector:unpr]$injector/unpr?p0=utilsProvider%20%3C-%20utils


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

在您的
utils.js
文件中,您应该设置其他模块名称。(如commons)

storage.js文件中:加载commons模块

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

在您的
utils.js
文件中,您应该设置其他模块名。(比如commons)

storage.js文件中:加载commons模块

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

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

var-app=angular.module('app',[]);//创建模块

app.service('utils',[function(){
/*在这里插入您的代码*/
}]);

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

app.controller('storageController',['$scope','storage','utils',function($scope,storage,utils){
/*这里是控制器代码*/

}]);

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

var-app=angular.module('app',[]);//创建模块

app.service('utils',[function(){
/*在这里插入您的代码*/
}]);

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

app.controller('storageController',['$scope','storage','utils',function($scope,storage,utils){
/*这里是控制器代码*/

}]);

您不能两次创建同一个模块
angular.module('app',[])
。您的意思可能是'angular.module('app').service('utils'),而我理解主题之外的原因(说“简单印刷错误”的部分),这是一个错误的假设。我认为在指定同一个模块时,可以在不同的文件中添加服务。您不能两次创建同一个模块
angular.module('app',[])
。您可能指的是'angular.module('app').service('utils'),而我理解非主题的原因(该部分说“简单印刷错误”),这是一个错误的假设。我认为可以在指定相同模块的同时在不同的文件中添加服务。谢谢!太明显了,我是一个完整的javascript和AngularJS新手:-PThanks!太明显了,我是一个完整的javascript和AngularJS新手:-PThanks,我知道这是可行的,但我更喜欢使用utils函数在一个单独的文件中,我确信越来越多的通用UTIL将不断添加到此服务中,以便处理多个控制器和服务中的常见任务。当您确信将继续添加到UTIL时,Steven的解决方案就是您应该选择的。并且请关注
angular.module('app',[])
重新创建模块。在这种情况下,将其分配给
var
会有所帮助。谢谢,我知道这是可行的,但我更喜欢将utils函数放在一个单独的文件中,因为我相信越来越多的通用utils将不断添加到此服务中,以便处理跨多个控制器和服务的常见任务。当您e确保您将继续添加到UTIL中,那么Steven的解决方案就是您应该选择的。并且您的手表应保持在重新创建模块的
angular.module('app',[])
。将其分配给
var
在这种情况下会有所帮助。