我有一个用例,我希望通过调用REST api来使应用程序的会话超时可配置,并使用$ http获取值。但正如我在此链接how to inject dependency into module.config(configFn) in angular中发现无法在配置方法中注入服务,我找到了这个解决方案,使其在配置中工作:
var $http = angular.injector(['ng']).get('$http');
这很好用,两种方法有什么区别以及为什么这样做?使用这种方法也有任何限制。
答案 0 :(得分:1)
angular.injector
创建一个新的注入器(应用程序实例)。它大部分时间都被滥用,很少需要在生产中使用。
它将拥有自己的$http
,$rootScope
,$q
等实例:
angular.injector(['ng']).get('$http') !== angular.injector(['ng']).get('$http');
在配置块中使用angular.injector
是一个反模式。它将导致不可测试且可能有错误的代码。 $http
请求是异步的,应用程序初始化将首先完成,并可能导致竞争条件。
大多数情况下,如果$http
中需要config
,则应在路线解析器中执行。如果响应包含应该用于配置服务提供者的信息并且应该在config
块中可用,则应该在应用程序引导之前获取它 - 事实上,应该有两个应用程序,如shown here。