2013-04-15 11 views
12

Ich bin neu bei angularjs. Ich versuche herauszufinden, wann ich Value vs Factory als Service nutzen soll. Hier ist mein einfacher Code aus egghead.io Tutorial:angularjs value vs factory

.value('Data', function(){ 
    return {message:"I am data from a service"}; 
    }) 

Die Data.message in ein Eingabefeld gebunden ist. Wenn ich die Seite starte, ist nichts in den Eingabefeldern. Wenn ich den Wert in factory ändere, wird die Standardmeldung im Eingabefeld angezeigt. Hier

ist der contoller:

controller('FirstCtrl', ['$scope','Data',function($scope, Data) { 
    $scope.data = Data; 
    console.log('exiting first controller'); 
    }]) 

und die Indexdatei:

<div ng-controller="FirstCtrl"> 
    <input type="text" ng-model="data.message"> 
    <h1>{{data.message}}</h1> 
</div> 

Warum ist die Seite leer, wenn der Wert mit? Meine Annahme ist, dass der Wert nicht berechnet oder berechnet wird, wenn die App startet, während die Fabrik ist?

Auch, wo kann ich einige Dokumentation über $ finden? Danke euch allen.

+3

Ein wenig in keinem Zusammenhang Bit dies mir in einer ähnlichen Situation geholfen. Factory vs. Service vs. https://gist.github.com/Mithrandir0x/3639232. Um die Chancen auf eine bessere Antwort zu erhöhen, wäre es hilfreich, wenn Sie ein Beispiel über jsFiddle oder einen ähnlichen Dienst bereitstellen könnten. – TheHippo

+0

Vielen Dank für den nützlichen Link. –

Antwort

19

den Wert auf ein Objekt setzen, anstatt eine Funktion:

app.value('Data', {message:"I am data from a service"}); 

Plunker

Siehe auch provide.value() und diese video about $provide (Wert, konstant, Service, Fabrik, Dekorateur, Anbieter)

+0

Vielen Dank für das Video. Viel geklärt. –

-1

Sie sollten den Controller als

app.controller('DataController', ['Data', function DataController(Data){ 
     this.data = Data; 
    }]); 
deklarieren

und verwenden Sie es auf Ihrer Seite wie dann in meinem Code

<div ng-controller='DataController as dataController'> 
     {{dataController.data()}} 
    </div>