代码片段 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 可以工作。我很困惑这是为什么?我读过的所有工厂示例代码,都在第一行注入(inject)依赖项,例如 .factory('MyFactory',[$q,function($q) {}]); 为什么这种风格在上面的提供者代码中不起作用?另外,为什么我们在 GET 声明下面注入(inject) $q 而不是在 TITLE 声明中注入(inject) $q 。
/* 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;
}
});
请帮忙!!!
(代码现在没有做任何事情。我只是想学习语法)
最佳答案
你不能在 provider
中进行直接 DI,当你使用 provider
时,你必须在 $get
中注入(inject)你的组件。
无法直接将依赖项注入(inject) provider
的原因是 provider
在模块加载阶段运行,而 $get
在模块加载阶段运行实例化您提供的服务。
在模块的加载/配置阶段,您不能使用任何服务。
关于angularjs - 错误 : [$injector:unpr] Unknown provider: $q. 对 DI 语法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32539911/