$ injector.get导致每次调用Angular模块的run()方法

时间:2015-07-21 23:24:41

标签: javascript angularjs

我需要从角度$ injector中手动获取内容。

我一直在前进:

var injector = angular.injector(['app.service', 'ng']);
var myService = injector.get('myService');

这很有效。但是,自从发现问题以来,我每次拨打run()时都会调用app.service模块的angular.injector方法。我有一些东西在那里初始化我的应用程序,现在运行了太多次。

我应该将我的app引导逻辑移出run()方法,还是有另一种方法来获取$ injector而没有调用run()方法?

我还有点担心调用喷油器对性能有害吗?

1 个答案:

答案 0 :(得分:1)

文档可能不清楚,但angular.injector确实用configrun块启动了整个模块(否则你会遇到依赖于这些问题的app组件的问题块)。

模块服务的实例(包括$rootScope)也不会与bootstrapped app中的实例相同。

您可以自由地将模块划分为易于使用的服务,但请记住,您无法与运行Angular应用程序进行交互。如果你需要在Angular内外使用相同的代码,那么在外面定义它。

如果您需要与正在运行的应用互动,请执行

var injector = angular.element(document).injector();

相反,作为文档suggests

  

我也有点担心调用喷油器很不好   性能

当然,会有一些RAM和CPU开销,其严重程度完全取决于您的模块。