Как "оживить загрузку" услуги в AngularJS? (создать экземпляр до его необходимости, автоматически)
Я пытаюсь создать такую структуру программы, как это:
![enter image description here]()
Проблема здесь в том, что, когда нет явного контроллера, использующего функции в начале, они не создаются и не регистрируются в FeatureRegistry
, поэтому они не могут отображаться в представлении. Но я хотел бы добиться того, что они отображаются в представлении, затем шаблон загружается через ng-include
, а затем в шаблоне для каждого feauture есть определенные контроллеры. Эти контроллеры - это те, которые используют функции.
Возможности в основном только там, чтобы рассказать о расположении шаблонов и значков, которые нужно использовать, а также начать запуск функции.
Но вернемся к моему первоначальному вопросу:
Как создавать службы, даже если они не нужны в данный момент?
Или есть ли другая функция, которую я могу использовать для этого вместо службы? Мне также хотелось бы, если бы вы указали мне на это:)
Ответы
Ответ 1
Вы можете запросить его в run
части вашего приложения, инжектор будет вызывать его.
angular.module("myApp", []).
factory("EagerService", function () {
console.log("I'm ready.");
}).
run(function (EagerService) {
console.log("EagerService is ready.");
});
Тем не менее, насколько я понимаю, у вас есть дочерние/вспомогательные контроллеры, которым это нужно EagerService
. Почему бы вам не добавить его там?
Ответ 2
(Поскольку это относительно старый - этот ответ для будущих читателей, но я наткнулся на этот вопрос, так что, возможно, кто-то еще тоже) Если вы используете провайдеры/блоки конфигурации - они выполняются с нетерпением, поэтому лучше делать желаемую инициализацию код там. Вы, вероятно, думали в терминах служб/блоков запуска.
Чтобы продемонстрировать код, это предупреждение не будет всплывать (предполагается, что myServiceModule
- это модуль, от которого зависит ваше приложение, а myService
не вводится нигде):
angular.module('myServiceModule', []).service('myService', function () {
alert("service");
// service
return {};
});
Однако это предупреждение появится, даже если никто не зависит от службы myProvider
:
angular.module('myProviderModule', []).provider('myProvider', function () {
alert("provider");
// Define your service here. Can be an array of inject-ables
// instead of a function.
this.$get = function () {
// service
return {};
};
});
Вы можете увидеть это в действии в этом plunker.
Подробнее о поставщиках в официальной документации здесь.