代码段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;
}
}]);
但是,Snippet 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;
}
});
请帮助!!!
(代码现在没有做任何事情。我只是想学习语法)
答案 0 :(得分:3)
您无法在provider
中执行直接DI,当您使用provider
时,必须在$get
中注入您的组件。
您无法直接向provider
注入依赖关系的原因是provider
在模块加载阶段运行,而$get
在实例化您提供的服务时运行。
在模块的加载/配置阶段,您无法使用任何服务。
答案 1 :(得分:1)
我已阅读的所有工厂示例代码,在第一行中注入依赖项,例如
.factory('MyFactory',[$q,function($q) {}]);
为什么这种样式在上面的提供程序代码中不起作用?
此图片始终帮助我了解provider
和factory
之间的区别:
factory
函数是$get
的{{1}}函数。 在注入之前,provider
构造函数可以配置provider
函数。 $get
函数是注入发生的地方。
$get
构造函数不可注入。这就是你得到那个错误的原因。 provider
函数是可注入的,这是您使用$get
指定的函数。 factory
只是用于创建带有空构造函数的factory
的语法糖。