4

片段 1 不起作用。我得到错误:[$injector:unpr] 未知提供者:$q

/* Snippet 1*/
var mApp = angular.module('MyApp',[]);
mApp.provider('authProvider', ['$q', function($q) {
    this.$get = function(){

        authProvider = {};
        authProvider.Title = function(){

            var deferred = $q.defer();
            deferred.resolve("promise resolved");
            return deferred.promise;

        }
        return authProvider;
    }
}]);

但是,片段 2 有效。我很困惑为什么会这样?我读过的所有工厂示例代码,在第一行注入依赖,例如 .factory('MyFactory',[$q,function($q) {}]); 为什么这种风格在上面的提供者代码中不起作用?另外,为什么我们在 GET 声明的下方注入 $q 而不是在 TITLE 声明的下方注入。

/* Snippet 2*/
mApp.provider('authProvider', function() {
    this.$get = function($q){

        authProvider = {};
        authProvider.Title = function(){

            var deferred = $q.defer();
            deferred.resolve("promise resolved");
            return deferred.promise;

        }
        return authProvider;
    }
});

请帮忙!!!

(代码现在没有做任何事情。我只是想学习语法)

4

2 回答 2

3

您不能直接 DI in provider,当您使用时,provider您必须将组件注入$get.

provider您无法直接 将依赖项注入的原因是provider在模块加载阶段$get运行,而在实例化您提供的服务时运行。

在模块的加载/配置阶段,您不能使用任何服务。

于 2015-09-12T14:33:01.430 回答
2

我读过的所有工厂示例代码都在第一行注入了依赖项,例如.factory('MyFactory',[$q,function($q) {}]);为什么这种样式在上面的提供程序代码中不起作用?

这张图一直帮助我理解 aprovider和 a之间的区别factory

xxxxxx
来源:simplygoodcode.com

factory函数是 的$get函数provider注入之前,provider构造函数可以配置$get函数。该$get函数是发生注入的地方。

构造provider函数是不可注入的。这就是为什么你得到那个错误。该$get函数是可注入的,这是您使用factory. factory只是provider使用空构造函数创建 a 的语法糖。

也可以看看

于 2015-12-29T11:02:46.493 回答