Почему angular factory не возвращает разные значения?

У меня есть эта скрипка, которая создает функциональный пример вопроса.

Мое понимание module.factory и module.service заключается в том, что предоставляемая вами сервисная функция возвращается путем вызова return new serviceFunction, когда вызывается фабричная функция и предоставляется возвращаемое значение. Я думал, что одним из следствий этого было то, что вы получите разные экземпляры фабричного результата.

Я создал эту фабрику:

app.factory('fact', function() {
    return Math.random();
});

а то два контроллера с завода вкалывают. Затем я сослался на результат фабричного метода как таковой:

app.controller('test1Controller', ['$scope', 'fact', function ($scope, fact) {
    $scope.fact = fact;
}]);

app.controller('test2Controller', ['$scope', 'fact', function ($scope, fact) {    
    $scope.fact = fact;
}]);

Я ожидал, что результатом будут два разных случайных числа, но они одинаковы. Как это возможно, если фабричный метод вызывается дважды?


person sonicblis    schedule 15.12.2014    source источник
comment
Ваши предположения ошибочны. Какой бы способ вы ни выбрали для создания сервиса, он всегда будет одноэлементным. Angular вызовет конструктор вашего сервиса, или фабрику сервисов, или функцию вашего провайдера только один раз и повторно использует созданный объект.   -  person JB Nizet    schedule 16.12.2014
comment
@JBNizet Это должен быть ответ.   -  person user1620220    schedule 16.12.2014
comment
Ну вот и все. @JBNizet, вставь это в ответ, и я с радостью приму это.   -  person sonicblis    schedule 16.12.2014


Ответы (1)


Ваши предположения ошибочны. Какой бы способ вы ни выбрали для создания сервиса, он всегда будет одноэлементным. Angular вызовет конструктор вашего сервиса, или фабрику сервисов, или функцию вашего провайдера только один раз и повторно использует созданный объект.

person JB Nizet    schedule 15.12.2014