理解Angularjs中的提供者

时间:2014-03-17 21:24:37

标签: javascript angularjs

我是angularjs的新手,我正在努力了解基础知识。任何人都可以解释我为什么在下面的例子中未定义某些值。

(function () {
'use strict';

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

    app.constant('configuration', {
        CONSTANT: "This is from constant",
    });

    app.provider('test',['configuration', function (configuration) {
      this.testItem1 = configuration.CONSTANT + "+ TestItem1";

      this.$get=['configuration', function(configuration){
        return {
          testItem2: configuration.CONSTANT + "+ TestItem2"
        }
      }];
    }]);

    app.config(['testProvider', function (tp) {
        console.log("From app.config: " + tp.testItem1);
        console.log("From app.config:" + tp.testItem2); //undefined
      }
    ]);

    app.run(['test', function(test){
        console.log("From app.run:" + test.testItem1); //undefined
        console.log("From app.run:" + test.testItem2);
    }]);
})();

我对生命周期或流程也有疑问。我假设它是如何流动的。 app.config-> DI测试提供者 - > DI配置 - 常量 - > app.run。如果我错了,请纠正我。谢谢。

Plunkr演示:http://plnkr.co/edit/2TIqgxMxBJEPbnk2Wk6D?p=preview

1 个答案:

答案 0 :(得分:1)

提供者和服务之间存在差异。

Provider是一个对象,它有$get方法,即使用时:

app.config(['testProvider', function (tp) {
    console.log("From app.config: " + tp.testItem1);
    console.log("From app.config:" + tp.testItem2); //undefined
  }
]);

tp是:

  this.testItem1 = configuration.CONSTANT + "+ TestItem1";

  this.$get=['configuration', function(configuration){
    return {
      testItem2: configuration.CONSTANT + "+ TestItem2"
    }
  }

另一方面,当你使用:

app.run(['test', function(test){
    console.log("From app.run:" + test.testItem1); //undefined
    console.log("From app.run:" + test.testItem2);
}]);

tp是:

{
   testItem2: configuration.CONSTANT + "+ TestItem2"
}