web-dev-qa-db-fra.com

AngularJS: Qu'est-ce qu'une usine?

J'ai beaucoup travaillé sur Angular.js Et, dans l'ensemble, je trouve qu'il s'agit d'un cadre intéressant et puissant.

Je sais qu'il y a eu beaucoup de discussions sur les services, les usines, les fournisseurs et les valeurs, mais je suis encore assez confus quant à ce qu'est un Factory.

L'usine a été définie dans d'autres discussions sur StackOverflow comme suit:

Usines

Syntaxe: module.factory( 'factoryName', function ); Résultat: lors de la déclaration de factoryName en tant qu'argument injectable, la valeur renvoyée par la référence de la fonction transmise à module.factory vous sera fournie.

Je trouve cette explication très difficile à comprendre et cela n’améliore pas ma compréhension de ce qu’est une usine.

Quelqu'un aurait-il des explications ou des exemples concrets à partager sur ce qu'est exactement un Factory et pourquoi vous devriez l'utiliser à la place d'un Service, Provider ou autre?

Mise à jour

Un service contient une référence à any object.

Un factory est une fonction qui renvoie tout objet

Un provider est une fonction qui renvoie tout fonction

- ouf -

100
Code Whisperer

D'après ce que je comprends, ils sont tous à peu près les mêmes. Les principales différences sont leurs complexités. 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

De plus, ceci 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()];
}​
70
Jonathan Palumbo

Une différence majeure que je vois est que vous pouvez exécuter du code personnalisé en usine. Mais, dans un service, seule la création d'objet a lieu.

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

    //Write custom code here

    return {
            Hello: function() {
            return "Hello, World!"
        }
    };
});
18
Hariprasad

Mes deux cents sur ce sujet. Je suis très novice et je suis juste à comprendre Angular JS). C’est l’une des choses qui m'a beaucoup dérouté et que j’ai donc étudié en détail. J'ai pris des notes pour donner des interviews. et cela peut être utile aux autres.

  • le service et l'usine font les mêmes choses de différentes manières
  • les deux sont injectables
  • pour la plupart des choses, utilisez la syntaxe d'usine
  • plus facile à comprendre
  • de nos jours avec es6 "service" est fait car il convertit en classes es6 mieux
  • sa logique de gestion essentiellement abstraite du contrôleur
  • si vous utilisez la logique biz avec des contrôleurs, vous ne pouvez utiliser que des contrôleurs
  • contrôleur est pour mettre des données sur la portée ne pas traiter longue logique biz
  • ainsi, dans le scénario ci-dessus, la logique complexe des entreprises est liée aux contrôleurs. Pas pour le traitement des données. Mettez donc des morceaux dans les services ou l’usine. Votre code est donc maigre et modulaire.
  • les services sont singletons
10
bytise

Les services sont principalement des objets dans lesquels vous décrivez la classe constructeur de l'objet. Quelque part au fond de la structure, la fonction Object.create () est appelée. Vous pouvez ensuite utiliser un service en appelant son objet et ses méthodes à l'aide d'un contrôleur. Factory, en revanche, ne crée pas d'objet par défaut et vous oblige donc à renvoyer l'emplacement complet de l'objet une fois que vous avez défini tous les attributs et méthodes.

0
Kaustubh J