来自另一个模块的Angular JS Service DI

时间:2014-11-19 21:57:52

标签: javascript angularjs module

我遇到了将角度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');

}]);

2 个答案:

答案 0 :(得分:1)

注射器正在抱怨,因为它正在寻找注入服务的a。您可以通过将solrquery更改为返回函数的工厂来解决此问题...

solr1.factory('solrquery', function () {
    return function (a) {
        console.log('searching for: ' + a);
    };
});

Live Demo

请注意,在技术上将其作为服务仍然有效,但返回某些内容的函数应该是一个工厂。

答案 1 :(得分:0)

angularjs.org错误链接告诉您问题所在。

Unknown provider: aProvider <- a <- solrquery

Angular的注入器正在寻找一个名为a的依赖项,该依赖项在solrquery服务的函数参数中指定:

solr1.service('solrquery',function(a) {

您的服务定义需要重新设计。这是您应该如何定义服务的一个很好的参考:angular.service vs angular.factory