似乎从角度的角度来看,注册服务提供商和模块配置代码的顺序很重要:为了使配置代码找到提供者,提供者应该在之前注册。订单在注册提供商和配置模块中的重要性angular.js
这对我来说总有意外惊喜,因为我认为,第一角处理所有供应商的注册,使它们可用于DI,然后调用配置回调,像这样:
module.config(函数(myServiceProvider ){...});
请在这里看到一个非常简短的测试,证明问题。它在“未知提供者”上失败,你可以在JS控制台中看到它:http://plnkr.co/edit/jGJmE2Fq7wOrwubdlTTX
我在这里丢失了什么吗?它是一个预期的角度行为?
谢谢。
正如你可以从中看到(http://plnkr.co/edit/iueOj8RuvGGSwI80MePb? p = preview)plunker,你也可以避免将模块放在全局范围内。一旦你定义了它们,你可以引用一个arg版本'angular.module('myModule')'并且避免使用全局变量。 – rewritten
我知道将提供者分离到不同的模块可以解决问题。但是,您提出的解决方案并不长久 - 将所有提供商分离为单独的模块确实解决了一个特定的问题,但是,如果在此模块中进行配置,则需要再次分离,导致无尽的模块来解决问题。我期望angular会优先考虑provider()高于config(),所以在之后调用它,或者至少将它记录为相等(使用相同的队列,如从它们的实现中可以看到的那样)。 – Stas
@Stas我不确定我是否理解你的评论。由于'config'用于配置模块,因此Angular期望您在运行'config'之前声明该模块的所有依赖关系,包括所有提供者。我不明白为什么这会导致“无尽的模块来解决这个问题”。一个简单的例子可能是您创建了一个“UtilitiesServices”模块,包含您需要的所有提供程序,将该模块添加为您应用程序模块的依赖项,然后在您的应用程序上运行“config”。我错过了什么? – marcoseu