2013-04-15 152 views
12

我是angularjs的新手。我試圖找出何時使用價值vs工廠作爲服務。這裏是我的簡單代碼來自egghead.io教程:angularjs值vs工廠

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

Data.message綁定到輸入字段。當我開始頁面時,輸入字段中沒有任何內容。如果我將值更改爲出廠值,則默認消息出現在輸入字段中。

這裏是位指示:

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

和索引文件:

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

爲什麼使用值當頁面空白?我的假設是,價值不是計算或應用程序啓動時計算,而工廠是?

另外,我可以在哪裏找到$ provide的一些文檔?謝謝你們。

+3

有點不相關的位這幫助我在類似的情況。工廠與服務vs.提供https://gist.github.com/Mithrandir0x/3639232。 爲了提高獲得更好答案的機會,如果您可以通過jsFiddle或類似的服務提供示例,這將是有益的。 – TheHippo

+0

謝謝你的有用鏈接。 –

回答

19

值設置爲一個對象,而不是函數:

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

Plunker

參見provide.value(),這video about $provide(值,常數,服務,工廠,裝飾,提供者)

+0

非常感謝您的視頻。澄清了很多。 –

-1

您應該聲明控制器爲

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

然後在你的頁面中使用它就像我的代碼

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