我遇到了将角度js模块中的服务注入主控制器的问题。我收到此错误:https://docs.angularjs.org/error/ $ injector / unpr?p0 = aProvider%20%3C-%20a%20%3C-%20solrquery
我的代码如下:
var app = angular.module('app1',[
'solr'
]);
app.controller('app1cont', ['$scope', 'solrquery', function($scope,solrquery){
console.log("Start");
$scope.value = 1;
solrquery('aaa');
}]);
solr模块如下所示:
var solr1 = angular.module('solr', []);
solr1.run(function(){
console.log("Module Loaded");
});
solr1.service('solrquery',function(a) {
console.log('searching for: ' + a);
}
);
当我运行它时,我看到Module Loaded打印到控制台并出现错误。如果我从app.controller和solrquery('aaa')中删除注入;代码运行正常...已经花了好几个小时,任何帮助将不胜感激。
提前致谢。
编辑:
感谢Anthony的回答,在重新编写代码之后,该模块看起来像这样:
var solr1 = angular.module('solr', []);
solr1.run(function(){
console.log("Module Loaded");
});
//as a factory
solr1.factory('solrquery',function() {
return function(a) {
console.log('searching for: ' + a);
}
}
);
//as a service
solr1.service('solrser', function() {
this.test = function(a) {
console.log(a);
}
});
控制器: var app = angular.module('app1',[ 'Solr的' ]);
app.controller('app1cont', ['$scope', 'solrquery', 'solrser', function($scope,solrquery,solrser){
console.log("Start");
$scope.value = 1;
solrquery('a');
solrser.test('a');
}]);
答案 0 :(得分:1)
注射器正在抱怨,因为它正在寻找注入服务的a
。您可以通过将solrquery
更改为返回函数的工厂来解决此问题...
solr1.factory('solrquery', function () {
return function (a) {
console.log('searching for: ' + a);
};
});
请注意,在技术上将其作为服务仍然有效,但返回某些内容的函数应该是一个工厂。
答案 1 :(得分:0)
angularjs.org错误链接告诉您问题所在。
Unknown provider: aProvider <- a <- solrquery
Angular的注入器正在寻找一个名为a
的依赖项,该依赖项在solrquery
服务的函数参数中指定:
solr1.service('solrquery',function(a) {
您的服务定义需要重新设计。这是您应该如何定义服务的一个很好的参考:angular.service vs angular.factory。