AngularJS: Фабрика и Сервис? [Дубликат]

На этот вопрос уже есть ответ:

AngularJS: Сервис против провайдера против фабрики 31 ответ

EDIT январь 2016: Так как это все еще привлекает внимание. С тех пор, как я спросил об этом, я завершил несколько проектов AngularJS, и для тех, кого я в основном использовалfactory, построил объект и вернул объект в конце. Мои утверждения ниже все еще верны, однако.

РЕДАКТИРОВАТЬ Я думаю, что наконец понял главное различие между ними, и у меня есть пример кода для демонстрации. Я также думаю, что этот вопрос отличается от предложенного дубликата. Дубликат говорит, что сервис не является инстанцируемым, но если вы настроите его, как я продемонстрировал ниже, это действительно так. Сервис может быть настроен так же, как на заводе. Я также предоставлю код, показывающий, где на заводе происходит сбой при обслуживании, что, похоже, не дает никакой другой ответ.

Если я настроил VaderService так (например, как сервис):

var module = angular.module('MyApp.services', []);

module.service('VaderService', function() {
    this.speak = function (name) {
        return 'Join the dark side ' + name;
    }
});

Затем в моем контроллере я могу сделать это:

module.controller('StarWarsController', function($scope, VaderService) {
    $scope.luke = VaderService.speak('luke');   
});

Со службой создается экземпляр VaderService, введенный в контроллер, поэтому я могу просто вызвать VaderService.speak, однако, если я изменю VaderService на module.factory, код в контроллере больше не будет работать, и это главное отличие. С фабрикой VaderService, введенный в контроллер, являетсян экземпляр, поэтому вам нужно вернуть объект при настройке фабрики (см. мой пример в вопросе).

Однако вы можете настроить сервис точно так же, как вы можете настроить фабрику (в IE она возвращает объект) и сервис ведет себя точно так же, как завод

Даю эту информацию, я вижуе @ нет причина использовать фабрику по обслуживанию, сервис может сделать все, что фабрика может и многое другое.

Первоначальный вопрос ниже.

Я знаю, что об этом спрашивали много раз, но я действительно не вижу никакой функциональной разницы между фабриками и сервисами. Я прочитал этот урок:http: //blogs.clevertech.biz/startupblog/angularjs-factory-service-provide

И это, кажется, дает достаточно хорошее объяснение, однако я настроил свое приложение следующим образом:

Index.html

<!DOCTYPE html>
<html>
    <head>
    <title>My App</title>
    <script src="lib/angular/angular.js"></script>
    <script type="text/javascript" src="js/controllers.js"></script>
    <script type="text/javascript" src="js/VaderService.js"></script>
    <script type="text/javascript" src="js/app.js"></script>
    </head>

    <body ng-app="MyApp"> 
        <table ng-controller="StarWarsController">
            <tbody>
            <tr><td>{{luke}}</td></tr>
            </tbody>
        </table>
    </body>
</html>

App.js:

angular.module('MyApp', [
  'MyApp.services',
  'MyApp.controllers'
]);

Controllers.js:

var module = angular.module('MyApp.controllers', []);

module.controller('StarWarsController', function($scope, VaderService) {
    var luke = new VaderService('luke');
    $scope.luke = luke.speak();
});

VaderService.js

var module = angular.module('MyApp.services', []);

module.factory('VaderService', function() {
    var VaderClass = function(padawan) {
        this.name = padawan;
        this.speak = function () {
            return 'Join the dark side ' + this.name;
        }
    }

    return VaderClass;
});

Затем, когда я загружаю index.html, я вижу "Присоединяйся к темной стороне, Люк", отлично. Точно так, как и ожидалось. Однако, если я изменю VaderService.js на этот (обратите внимание на module.service вместо module.factory):

var module = angular.module('MyApp.services', []);

module.service('VaderService', function() {
    var VaderClass = function(padawan) {
        this.name = padawan;
        this.speak = function () {
            return 'Join the dark side ' + this.name;
        }
    }

    return VaderClass;
});

Затем перезагрузите index.html (я удостоверился, что очистил кеш и сделал полную перезагрузку). Оно работаетв точк так же, как и с module.factory. Так в чем же реальная функциональная разница между двумя ??

Ответы на вопрос(4)

Ваш ответ на вопрос