【问题标题】:Confusion about the conventions for $provide in angularjs关于 angularjs 中 $provide 的约定的困惑
【发布时间】:2014-07-06 06:01:50
【问题描述】:
我正在尝试了解 angularjs 中的依赖注入。让我感到困惑的一件事是$provide 对象,这可能只是命名约定的一个例外。
- 在angularjs api documentation 中,它被列为
auto 模块的service,即它应该可以注入到其他服务中,但实际上它是一个provider,即只能注入到模块的@987654327 中@块。
-
As seen here、
$provide(默认情况下)存储在 providerCache 中,这是有道理的,因为它是提供者。但是,它不使用标准命名约定;所有提供者都有后缀Provider。也就是说,它应该被命名为$provideProvider。
这只是文档的约定和providers 命名约定的例外吗?还是这里发生了其他事情?
【问题讨论】:
标签:
javascript
angularjs
dependency-injection
【解决方案1】:
您可以将$provide 服务视为可以在模块的.config 部分注入的服务。
module.provider('providerName', function() { ... });
module.service('serviceName', function() { ... });
module.factory('factoryName', function() { ... });
// Is the same as:
module.config(['$provide', function($provide) {
$provide.provider('providerName', function() { ... });
});
module.config(['$provide', function($provide) {
$provide.service('serviceName', function() { ... });
});
module.config(['$provide', function($provide) {
$provide.factory('factoryName', function() { ... });
});
为了回答你的问题:
1. 从源码来看,$provide 似乎不是典型的提供者,因为它没有注册为典型的提供者。然而,这是有道理的,因为$provide 用于注册其他提供者。
2. 我没有任何依据,但我假设这个命名约定的例外是这个是规则的一个例外。 $provide 服务与任何其他提供程序都不同。