103 votes

Qu'est ce qu'un Angular.js 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 vs Usines contre des Fournisseurs de contre Valeurs, mais je suis encore assez confus au sujet de ce qu'est un Factory .

L'usine a été définie dans d'autres StackOverflow discussions que les suivantes:

Les usines

Syntaxe: module.factory( 'factoryName', function ); Résultat: Lors de la déclaration de factoryName comme un produit injectable argument, vous sera fourni avec la valeur qui est retournée par l'invocation de la fonction de référence transmise au module.usine.

Je trouve cette explication très difficile à saisir et il n'a pas d'augmenter ma compréhension de ce qu'est une usine est.

Quelqu'un avez des explications ou des exemples concrets à partager sur ce qu'est exactement un Factory est et pourquoi vous devriez l'utiliser en lieu et place d'un Service, Provider, ou d'autres?

71voto

Jonathan Palumbo Points 2357

De ce que j'ai compris qu'ils sont tous à peu près la même. Les principales différences sont les leurs complexités. Les fournisseurs sont configurables au moment de l'exécution, les usines sont un peu plus robustes, et les services sont la forme la plus simple.

Découvrez cette question Angular.js: service vs fournir vs usine?

Aussi ce résumé peut être utile dans la compréhension des différences subtiles.

// Source: https://groups.google.com/forum/#!topic/angular/hVrkvaHGOfc
// jsFiddle: http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/
// author: 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()];
}​

18voto

Hariprasad Points 1210

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

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

    //Write custom code here

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X