我在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
如何将此服务注入控制器?
答案 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*/
}]);