通过传递参数和使用angular.injector

时间:2017-09-16 08:49:50

标签: angularjs

我有一个用例,我希望通过调用REST api来使应用程序的会话超时可配置,并使用$ http获取值。但正如我在此链接how to inject dependency into module.config(configFn) in angular中发现无法在配置方法中注入服务,我找到了这个解决方案,使其在配置中工作:

var $http = angular.injector(['ng']).get('$http');

这很好用,两种方法有什么区别以及为什么这样做?使用这种方法也有任何限制。

1 个答案:

答案 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