2013-04-15 13 views
12

Jestem nowy w angularjs. Próbuję dowiedzieć się, kiedy wykorzystać wartość vs fabryka jako usługę. Oto mój prosty kod z samouczka egghead.io:Wartość Angularjs kontra Fabryka

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

DataMessage jest powiązany z polem wprowadzania danych. Kiedy zaczynam stronę, nie ma nic w polach wejściowych. Jeśli zmienię wartość na fabryczną, w polu wejściowym pojawi się komunikat domyślny.

Oto contoller:

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

a plik index:

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

Dlaczego jest pusta strona przy użyciu wartości? Moje założenie jest takie, że wartość nie jest obliczana lub obliczana podczas uruchamiania aplikacji, gdy fabryka jest?

Ponadto, gdzie mogę znaleźć dokumentację dotyczącą $ provide? Dziękuję wam wszystkim.

+3

Trochę niezwiązane trochę to pomogło mi w podobnej sytuacji. fabryka a usługa kontra zapewniają https://gist.github.com/Mithrandir0x/3639232. Aby zwiększyć szanse na uzyskanie lepszej odpowiedzi, byłoby pomocne, gdybyś mógł podać przykład za pośrednictwem jsFiddle lub podobnej usługi. – TheHippo

+0

Dziękuję za przydatne łącze. –

Odpowiedz

19

Ustaw wartość obiektu, zamiast funkcji:

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

Plunker

Zobacz także provide.value() i to video about $provide (wartość stała, serwis, fabryka, dekorator, operatora)

+0

Dziękuję bardzo za wideo. Wyjaśnione dużo. –

-1

należy zadeklarować jako kontroler

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

a następnie używać go w swoją stronę, jak w moim kodu

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