angularjs - 错误 : [$injector:unpr] Unknown provider: $q. 对 DI 语法感到困惑

标签 angularjs angularjs-provider

代码片段 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/

相关文章:

javascript - 使用 ng-cloak 创建启动画面

html - ngDialog - closeModal 事件 - angularjs

javascript - 从基本提供者继承时如何防止直接访问属性?

Angular : Using common service in different modules

javascript - 如何在没有html的情况下使用angularjs(过滤器服务)(用于chrome扩展)

angularjs - 如何将多个 TypeScript 模块打包成组进行组织

javascript - wny popover 不显示在 Angular js 中?

angularjs - 等待 Provider 完成后再进入 State

javascript - 未知提供者错误 Angular

在不同模块中具有不同配置的 Angularjs 提供程序