在 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版本开始,provider
和config
的定义顺序不重要了。
- 在 Angular 1.2.29 中:http://jsfiddle.net/c4Lg3da4/
-->
KO
- 在 Angular 1.3.0 中:http://jsfiddle.net/c4Lg3da4/1/
-->
OK
- 在 Angular 1.4.8 中:http://jsfiddle.net/40arcz2p/
-->
OK
测试代码:
angular.module('myApp',[])
.provider('testService', function() {
console.log('.. service');
this.$get = function () {
return {};
};
})
.config(function(testServiceProvider) {
console.log('.. 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版本开始,provider
和config
的定义顺序不重要了。
- 在 Angular 1.2.29 中:http://jsfiddle.net/c4Lg3da4/
-->
KO - 在 Angular 1.3.0 中:http://jsfiddle.net/c4Lg3da4/1/
-->
OK - 在 Angular 1.4.8 中:http://jsfiddle.net/40arcz2p/
-->
OK
测试代码:
angular.module('myApp',[])
.provider('testService', function() {
console.log('.. service');
this.$get = function () {
return {};
};
})
.config(function(testServiceProvider) {
console.log('.. config');
});