Wenn einen Winkel Service oder Fabrik zu schaffen, hinter den Kulissen, Angular schließlich die gleiche Funktion für beide verwendet:
function factory(name, factoryFn, enforce) {
return provider(name, {
$get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
});
}
Wenn eine Dienstleistung zu schaffen, wird ein Rückgabewert im Allgemeinen nicht gesendet, und hinter den Kulissen, Object.create()
wird aufgerufen, um ein Objekt zu erstellen, das die sayHello
-Methode enthält.
app.service('MyService', function() {
this.sayHello = function() {
console.log('hello');
};
});
Wenn jedoch eine Fabrik zu schaffen, ein Objektliteral zurückgegeben:
app.factory('MyService', function() {
return {
sayHello: function() {
console.log('hello');
};
}
});
Grundsätzlich erzwingen verwendet, um einen Rückgabewert zu erzwingen. Es ist nicht nur eine Frage von "Ist das ein Dienst oder eine Fabrik?" da kann man noch ein Objektliteral von einem Dienst zurückkehren, wenn man will:
app.service('MyService', function() {
return {
sayHello: function() {
console.log('hello');
};
}
});
In Bezug auf die Frage: „Welche Sie verwenden sollen“ Überprüfen Sie diese:
http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html