AngularJS: Fabrik und Service? [Duplikat

Diese Frage hat hier bereits eine Antwort:

AngularJS: Service vs Anbieter vs Fabrik 31 answers

EDIT Jan 2016: Da bekommt das noch aufmerksamkeit. Seitdem ich das gefragt habe, habe ich ein paar AngularJS-Projekte abgeschlossen, und für die habe ich meistens @ verwendefactory, baute ein Objekt auf und gab das Objekt am Ende zurück. Meine Aussagen unten sind jedoch immer noch wahr.

EDIT: Ich denke, ich verstehe endlich den Hauptunterschied zwischen den beiden, und ich habe ein Codebeispiel zu demonstrieren. Ich denke auch, dass sich diese Frage von dem vorgeschlagenen Duplikat unterscheidet. Das Duplikat besagt, dass der Dienst nicht instanziierbar ist, aber wenn Sie ihn wie unten gezeigt einrichten, ist er es tatsächlich. Ein Dienst kann so eingerichtet werden, dass er genau dem einer Fabrik entspricht. Ich werde auch Code bereitstellen, der zeigt, wo der Factory-Failover-Service ausgeführt wird, was anscheinend keine andere Antwort bietet.

Wenn ich VaderService wie folgt eingerichtet habe (dh als Dienst):

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

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

Dann in meinem Controller kann ich dies tun:

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

Mit dem Dienst wird der in den Controller eingespeiste VaderService instanziiert, sodass ich nur VaderService.speak aufrufen kann, wenn ich den VaderService in module.factory ändere.der Code im Controller funktioniert nicht mehr, und das ist der Hauptunterschied. Ab Werk ist der in den Controller eingespeiste VaderServicenich instanziiert, weshalb Sie beim Einrichten einer Factory ein Objekt zurückgeben müssen (siehe mein Beispiel in der Frage).

Sie können einen Dienst jedoch genauso einrichten, wie Sie eine Factory einrichten können (dh, Sie müssen ein Objekt zurückgeben) undDer Service verhält sich genauso wie eine Fabrik

Gegeben diese Informationen, sehe ichNei Grund für die Verwendung von Factory over Service, Service kann alles, was Factory kann und mehr.

Ursprüngliche Frage unten.

Ich weiß, dass dies viele Male gefragt wurde, aber ich kann keinen funktionalen Unterschied zwischen Fabriken und Dienstleistungen feststellen. Ich hatte dieses Tutorial gelesen:http: //blogs.clevertech.biz/startupblog/angularjs-factory-service-provide

Und es scheint eine einigermaßen gute Erklärung zu geben, aber ich habe meine App wie folgt eingerichtet:

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'
]);

controller.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;
});

Dann, wenn ich index.html lade, sehe ich "Join the dark side luke", großartig. Genau wie erwartet. Wenn ich jedoch "VaderService.js" in "this" ändere (beachten Sie "module.service" anstelle von "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;
});

Then reload index.html (Ich habe dafür gesorgt, dass der Cache geleert und ein hartes Neuladen durchgeführt wurde). Es klapptgena genauso wie bei module.factory. Also, was ist der wirkliche funktionale Unterschied zwischen den beide

Antworten auf die Frage(4)

Ihre Antwort auf die Frage