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

Angular JS Service DI from another module

本文关键字:JS Service DI Angular 另一个 模块      更新时间:2023-09-26

我在将服务从角度 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);
}
);

当我运行它时,我看到模块加载打印到控制台并出现错误。如果我从应用程序控制器和 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',[ "索尔" ]);

app.controller('app1cont', ['$scope', 'solrquery', 'solrser', function($scope,solrquery,solrser){
    console.log("Start");
    $scope.value = 1;
    solrquery('a');
    solrser.test('a');
}]);

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

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

现场演示

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

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

Unknown provider: aProvider <- a <- solrquery

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

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

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