【问题标题】:Why must a provider be defined before a config block为什么必须在配置块之前定义提供程序
【发布时间】:2014-05-31 20:49:25
【问题描述】:

我有一个模块。它有一个配置块、一个提供者和一个定义的常量。 config 块引用常量和提供者。我注意到我的常量可以在我的配置块之前或之后定义。但是,必须在配置块之前定义提供程序,否则我会收到错误。

Error: [$injector:modulerr] Failed to instantiate module loadOrder due to:
[$injector:unpr] Unknown provider: greetingsProvider

这里是一些示例代码:

var myModule = angular.module('loadOrder', []);

//if I define this after the config block, I get an error
angular.module('loadOrder').provider('greetings',[ function(){
    this.$get = [function(){
        return { greet: function(){ return "Hola"; } };
    }];
}]);

myModule.config(['$provide', 'greetingsProvider', 'planetName', function($provide, loadOrderProvider, planetName){
    $provide.value('someVals',[3,6,8]);
    console.log("Lets go to", planetName);
}]);

myModule.constant('planetName', 'Saturn');

这是为什么?为什么我不能在我的配置块之后定义我的提供者?

【问题讨论】:

    标签: angularjs angularjs-module


    【解决方案1】:

    当您致电 providerconfigconstant 时,不会立即发生任何事情。调用在应用程序初始化期间被注册、放入队列并运行。

    constant 的有趣之处在于它被排在了队列的最前面。因此它在config 之前可用,无论如何。

    【讨论】:

    • 我仍然很困惑,因为如果我在我的运行块中引用一个服务,如果该服务是在运行块之后定义的,它不会导致错误。你知道为什么定义顺序对服务/运行块无关紧要,但对提供者/配置块很重要吗?
    • @Selah 运行块在一切设置完成后被调用。
    • @zeroflagL 你能澄清为什么提供者必须在配置块之前定义。如果没有立即发生,为什么提供程序是在 config 块之后定义的,而不是之前定义的,为什么会出错?
    • @dnc253:所有的函数最终都会被调用,并且按照它们被注册的顺序被调用。当然,config 函数在 provider 函数之前运行,甚至放在同一个队列中,这是没有意义的,但这是目前的工作方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    相关资源
    最近更新 更多