为什么Angular将'Provider'附加到我的服务名称?

时间:2015-08-12 16:28:40

标签: angularjs

我正在试图找出为什么Angular在我未在任何地方声明的提供商上给我以下错误。

  

错误:$ injector:unpr
     未知提供者:dblServiceProvider< -

这是我工厂的骨架:

angular.module('fv.services', [])
.factory('dblService', function($q, $http) {
    this.getAll = function() {
        var deferred = $q.defer();

        var responsePromise = $http.post(URL, POSTPARAMS)
        .success( function(data, status, header, config) {
            // do something
        })

        return deferred.promise;
    };

    return {
        getAll: getAll()
    };
});

我尝试在控制器中实例化该服务,这就是触发上述错误的地方。

.controller('searchCtrl', ['lotsOfInjections', 'dblService', function(lotsOfInjections, dblService) {
    // do something
}]);

为什么Angular会附加“Provider”并寻找我尚未声明的提供商?

1 个答案:

答案 0 :(得分:4)

因为所有服务都是由提供者创建的,并且服务提供者始终是服务名称,后跟" Provider"。

使用工厂定义服务foo时,Angular实际上会创建一个提供程序fooProvider,它委托工厂创建服务实例。此提供程序存储在服务提供程序的注册表中。当另一个组件需要服务foo时,angular会在其注册表中查找fooProvider