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
在这种情况下会有所帮助。