$ injector.get вызывает метод run () модуля Angular каждый раз, когда вызывается

0

Мне нужно вручную получать вещи от углового инжектора.

Я собираюсь:

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

Это отлично поработало. Но с тех пор я заметил проблему, метод run() модуля app.service вызывается каждый раз, когда я вызываю angular.injector. У меня были вещи, которые инициализировали мое приложение, которое сейчас запускается слишком много раз.

Должен ли я переместить логику начальной загрузки приложения из метода run(), или есть другой способ получить инжектор $ без вызова метода run()?

Я также немного обеспокоен тем, что вызывать инжектор много плохо для производительности?

Теги:

1 ответ

1
Лучший ответ

Документация может быть неясно, но angular.injector действительно инициирует весь модуль с config и run блоками (иначе вы столкнетесь с проблемами с компонентами приложения, которые зависят от этих блоков).

Экземпляры служб модулей (включая $rootScope) также не будут такими же, как и в загруженном приложении.

Вы можете разделить модуль так, как его услуги будут удобны в использовании, но имейте в виду, что вы не сможете взаимодействовать с запущенным угловым приложением. Если вам нужно использовать тот же код внутри и снаружи Углового, то определите его снаружи.

Если вам нужно взаимодействовать с запущенным приложением,

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

вместо этого, как предполагает документация.

Я также немного обеспокоен тем, что вызывать инжектор много плохо для производительности?

Разумеется, накладные расходы на ОЗУ и ЦП будут выше, его серьезность полностью зависит от вашего модуля.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню