2016-06-08 3 views
1

Ich ging durch die Details, wie eckig tatsächlich erstellt Factory nur mit module.factory() -Methode.Was ist die Bedeutung von erzwingen Parameter in AngularJS Factory

fand ich, dass intern Winkel Verwendungen Verfahren folgende, die intern Anbieter

function factory(name, factoryFn, enforce) 

So wird in Bezug auf meine Frage nur verwendet der dritte Parameter enforce dieser Funktion, was es tatsächlich der Fall ist.

Antwort

1

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