Как "оживить загрузку" услуги в AngularJS? (создать экземпляр до его необходимости, автоматически) - программирование
Подтвердить что ты не робот

Как "оживить загрузку" услуги в AngularJS? (создать экземпляр до его необходимости, автоматически)

Я пытаюсь создать такую ​​структуру программы, как это:

enter image description here

Проблема здесь в том, что, когда нет явного контроллера, использующего функции в начале, они не создаются и не регистрируются в FeatureRegistry, поэтому они не могут отображаться в представлении. Но я хотел бы добиться того, что они отображаются в представлении, затем шаблон загружается через ng-include, а затем в шаблоне для каждого feauture есть определенные контроллеры. Эти контроллеры - это те, которые используют функции.

Возможности в основном только там, чтобы рассказать о расположении шаблонов и значков, которые нужно использовать, а также начать запуск функции.

Но вернемся к моему первоначальному вопросу:
Как создавать службы, даже если они не нужны в данный момент?

Или есть ли другая функция, которую я могу использовать для этого вместо службы? Мне также хотелось бы, если бы вы указали мне на это:)

4b9b3361

Ответ 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.

Подробнее о поставщиках в официальной документации здесь.