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?
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 -
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()];
}
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!"
}
};
});
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.
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.