我是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
答案 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"
}