Мне нужно вручную получать вещи от углового инжектора.
Я собираюсь:
var injector = angular.injector(['app.service', 'ng']);
var myService = injector.get('myService');
Это отлично поработало. Но с тех пор я заметил проблему, метод run()
модуля app.service вызывается каждый раз, когда я вызываю angular.injector
. У меня были вещи, которые инициализировали мое приложение, которое сейчас запускается слишком много раз.
Должен ли я переместить логику начальной загрузки приложения из метода run(), или есть другой способ получить инжектор $ без вызова метода run()?
Я также немного обеспокоен тем, что вызывать инжектор много плохо для производительности?
Документация может быть неясно, но angular.injector
действительно инициирует весь модуль с config
и run
блоками (иначе вы столкнетесь с проблемами с компонентами приложения, которые зависят от этих блоков).
Экземпляры служб модулей (включая $rootScope
) также не будут такими же, как и в загруженном приложении.
Вы можете разделить модуль так, как его услуги будут удобны в использовании, но имейте в виду, что вы не сможете взаимодействовать с запущенным угловым приложением. Если вам нужно использовать тот же код внутри и снаружи Углового, то определите его снаружи.
Если вам нужно взаимодействовать с запущенным приложением,
var injector = angular.element(document).injector();
вместо этого, как предполагает документация.
Я также немного обеспокоен тем, что вызывать инжектор много плохо для производительности?
Разумеется, накладные расходы на ОЗУ и ЦП будут выше, его серьезность полностью зависит от вашего модуля.