为什么必须在配置块之前定义提供程序

Sel*_*lah 6 angularjs angularjs-module

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

Error: [$injector:modulerr] Failed to instantiate module loadOrder due to:
[$injector:unpr] Unknown provider: greetingsProvider
Run Code Online (Sandbox Code Playgroud)

以下是一些示例代码:

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');
Run Code Online (Sandbox Code Playgroud)

为什么是这样?为什么我的配置块后无法定义我的提供程序?

a b*_*ver 0

当你打电话时provider,config或者constant什么也不会立即发生。这些调用被注册、放入队列并在应用程序初始化期间运行。

有趣的constant是它被放在队列的前面。config因此,无论如何,它之前都是可用的。