2013-04-01 50 views
1

我剛剛開始使用AngularJS,我仍然試圖瞭解創建服務。從thisthis,我的理解是隻要對變量的更改在Angular中,就不需要$監視它們。我複製代碼here,並且修改了它,看看我能得到我的第一個服務的工作:AngularJS - 非HTTP服務不更新範圍變量

myApp.factory('ListService', function() { 
    var ListService = {}; 
    var list = ['a', 'b', 'c']; 
    ListService.addItem = function(item) { list.push(item); } 
    ListService.size = function() { return list.length; } 
    ListService.size1 = list.length; 
    return ListService; 
}); 

function Ctrl1($scope, ListService) { 
    $scope.message = ListService.size(); 
    $scope.addItem = function(){ 
     ListService.addItem('d'); 
     console.log("size() is " + ListService.size()); 
     console.log("size1 is " + ListService.size1); 
    } 
} 

function Ctrl2($scope, ListService) { 
    $scope.message = ListService.size1; 
} 

的HTML很簡單:

<div ng-controller="Ctrl1"> Count is: {{ message }} 
    <input type="button" ng-click="addItem"> 
</div> 

<div ng-controller="Ctrl2"> Count is: {{ message }} 
</div> 

當點擊該按鈕時,控制檯日誌顯示正確的計數,但「消息」保持不變。原始代碼應該是人爲設計的,並且意在表明可以使用服務在控制器之間共享代碼。

所以我的問題是,爲什麼這不工作?如果我錯過了非常簡單的事情,我很抱歉。我是一個初學者,我仍然試圖得到一堆東西。

回答

0

相反

$scope.message = ListService.size(); 

嘗試

$scope.getCount = function() { 
    return ListService.size(); 
}; 

,然後在視圖:

Count is: {{getCount()}} 

那是因爲你的$ scope.message是包含ListService的規模目前原始值控制器初始化。

(我在英語口語裏真的不好,所以對於簡短的回答很抱歉)。

+0

哦,爲什麼它在$ http服務中工作?我想這是因爲$ http返回$ q.promise對象,而不是值和角模板系統可以等到所有的承諾解決,並顯示結果。 –