AngularJS: qu'est Ce qu'une usine?

j'ai fait beaucoup de travail sur Angular.js et dans l'ensemble je trouve que c'est intéressant et puissant framework.

je sais qu'il y a eu beaucoup de discussions sur les Services par rapport aux usines par rapport aux fournisseurs par rapport aux valeurs, mais je suis encore assez confus sur ce qu'est un Factory .

usine a été définie dans d'autres discussions sur le débordement des piles comme étant la suivante:

usines

syntaxe: module.factory( 'factoryName', function ); résultat: lorsque vous déclarez factoryName comme argument injectable, vous recevrez la valeur retournée en invoquant la référence de la fonction passée au module.usine.

je trouve cette explication très difficile à saisir et elle ne me permet pas de mieux comprendre ce qu'est une usine.

Serait-on avoir des explications ou des exemples concrets à partager sur ce qu'est exactement un Factory est-ce et pourquoi devriez-vous l'utiliser au lieu d'un Service , Provider , ou autre?

mise à Jour

Un service contient une référence à tout objet .

A factory est une fonction qui retourne n'importe quel objet

Un provider est une fonction qui renvoie tout fonction

- ouf -

90
demandé sur John Slegers 2013-05-17 00:10:24

4 réponses

D'après ce que j'ai compris, ils sont tous à peu près les mêmes. Les principales différences sont leur complexité. Les fournisseurs sont configurables à l'exécution, les usines sont un peu plus robustes, et les services sont la forme la plus simple.

découvrez cette question AngularJS: Service vs fournisseur vs usine

aussi ce gist peut être utile pour comprendre les différences subtiles.

Source: https://groups.google.com/forum/#!topic / angular/hVrkvaHGOfc

jsFiddle: http://jsfiddle.net/pkozlowski_opensource/PxdSP/14 /

auteur: Pawel Kozlowski

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

//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
    this.sayHello = function() {
        return "Hello, World!";
    };
});

//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
    return {
        sayHello: function() {
            return "Hello, World!";
        }
    };
});

//provider style, full blown, configurable version     
myApp.provider('helloWorld', function() {
    // In the provider function, you cannot inject any
    // service or factory. This can only be done at the
    // "$get" method.

    this.name = 'Default';

    this.$get = function() {
        var name = this.name;
        return {
            sayHello: function() {
                return "Hello, " + name + "!";
            }
        };
    };

    this.setName = function(name) {
        this.name = name;
    };
});

//hey, we can configure a provider!            
myApp.config(function(helloWorldProvider){
    helloWorldProvider.setName('World');
});


function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {

    $scope.hellos = [
        helloWorld.sayHello(),
        helloWorldFromFactory.sayHello(),
        helloWorldFromService.sayHello()];
}​
67
répondu Jonathan Palumbo 2017-05-23 11:55:07

une différence majeure que je vois est que vous pouvez exécuter du code personnalisé dans l'usine. Mais, dans un service, seule la création d'objet se produit.

myJs.factory('Factory', function() {

    //Write custom code here

    return {
            Hello: function() {
            return "Hello, World!"
        }
    };
});
18
répondu Hariprasad 2013-05-16 20:19:16

Mes deux cents sur ce sujet. Je suis une très très très novice et juste pour comprendre JS angulaire et c'était l'une des choses qui m'a beaucoup troublé et donc je l'ai étudié dans un peu de détail. J'ai pris des notes pour donner des entrevues et cela pourrait être utile à d'autres.

  • le service et l'usine font les mêmes choses de façons différentes
  • les deux sont les injections
  • pour la plupart des choses utilisez la syntaxe d'usine
  • plus facile à comprendre
  • de nos jours avec es6 "service" est fait car il convertit mieux aux classes es6
  • son abstraction de la logique métier du contrôleur
  • si vous utilisez biz logic avec les controllers, vous ne pouvez l'utiliser qu'avec les controllers""
  • contrôleur est pour mettre des données sur le champ d'application Pas de traitement longue logique biz
  • alors ce qui se passe en haut le scénario est que la logique biz complexe est liée aux contrôleurs. Pas pour le traitement des données. Donc, mettez des morceaux de services ou de l'usine. Votre code est simple et modulaire.
  • les services sont des singletons
10
répondu bytise 2016-03-13 00:39:48

Services sont la plupart du temps des objets dans lesquels vous décrivez la classe du constructeur de l'objet. Quelque part au fond du cadre, L'objet.create () function est appelée et ensuite vous pouvez utiliser un service en appelant son objet et ses méthodes à l'aide d'un controller. Factory, d'un autre côté, ne crée pas un objet par défaut et vous oblige donc à retourner la totalité de l'emplacement de l'objet une fois que vous avez défini tous les attributs et les méthodes.

0
répondu Kaustubh 2018-06-02 17:35:58