在 Angular 中,为什么我必须在配置之前声明提供者?

In Angular, why am I forced to declare the provider before the config?

为什么我必须在将要使用它的 config 函数之前声明 provider

换句话说,这段代码有效:

angular.module('app')
  .provider('testService', function() {
    // ...
  })
  .config(function(testServiceProvider) {
    // ...
  });

但不是这个(得到 [$injector:unpr] Unknown provider: testServiceProvider):

angular.module('app')
  .config(function(testServiceProvider) {
    // ...
  })
  .provider('testService', function() {
    // ...
  });

(在我的真实代码中,这两个块是在不同的文件中定义的,因此加载这些文件的顺序非常重要)

我的理解是,当我调用module('app').config(...)module('app').provider(...)时,代码并没有立即执行,而是在引导Angular应用程序时执行,因此,这就是作用Angular 以正确的顺序执行不同的代码(即 provider 代码和 then config 代码)。

谢谢

ps1:我已经看到了this question,完全相同,但答案更多是建议或猜测...

ps2:我仍在使用 Angular 1.2,也许 Angular 1.3 - 1.4 有所改变?

我测试了几个 Angular 版本,它似乎是 "bug" in 1.2.x 版本。从1.3.0版本开始,providerconfig的定义顺序不重要了。

测试代码:

angular.module('myApp',[])
  .provider('testService', function() {
    console.log('.. service');
    this.$get = function () {
      return {};
    };
  })
  .config(function(testServiceProvider) {
    console.log('.. config');
  });