2014-09-25 54 views
1

問題:

我想通過數組來傳遞變量到$ watchGroup和循環數組更新每個值,但這似乎並沒有工作:

$scope.secondsElapsed = stopWatchService.secondsElapsed; 
$scope.minutesElapsed = stopWatchService.minutesElapsed; 
$scope.colon = stopWatchService.colon; 

$scope.timers = ['stopWatchService.secondsElapsed', 'stopWatchService.minutesElapsed', 'stopWatchService.colon']; 

$scope.$watchGroup([$scope.timers], function(newValues, oldValues, scope){ 
    if (newValues && newValues !== oldValues){ 
     for (var i=0; i<newValues.length; i++){ 
      scope.timers[i] = newValues[i]; 
     } 
    } 
}); 

當前的工作圍繞我有如下:

$scope.$watchGroup(['stopWatchService.secondsElapsed', 'stopWatchService.minutesElapsed', 'stopWatchService.colon'], function(newValues, oldValues, scope){ 
    scope.secondsElapsed = newValues[0]; 
    scope.minutesElapsed = newValues[1]; 
    scope.colon = newValues[2]; 
}); 

任何想法?

+0

您可能要深手錶'stopWatchService'呢?對於深度觀察組我早些時候提供了一個答案,可能它可能會幫助你... http://stackoverflow.com/questions/25956768/how-to-watch-more-than-one-collection-in-angular/25960854# 25960854 – PSL 2014-09-25 17:47:24

+1

在你的第二個代碼片段中,'$ scope.timers'只保存了那個時間點的經過時間值,這意味着它是原始數組,因此後面的變量變化將不可用,因此watch函數將不會每次運行評估手錶會產生相同的結果.. $ scope。$ watchGroup($ scope.timers,function(...'。請記住'watchGroup'不會深入監視... – PSL 2014-09-25 17:56:32

+0

感謝。所以我該如何聲明我的數組呢?我不知道如何傳遞變量本身而不是值。 – justinSYDE 2014-09-25 18:02:06

回答

0

你有沒有選擇$watchCollectionhttps://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$ watchCollection

+0

是的,我有。也許,我錯誤地使用了它,但它沒有按照我的意願更新範圍變量。 我編輯了我的問題,包括我的$ watchCollection嘗試。 – justinSYDE 2014-09-25 17:45:42

0

嘗試檢查$ watchGroup,我認爲正是你的問題,傳遞一個數組作爲第一個參數,對嗎?

0

不要把$scope.timers放入數組中,它已經是一個了。

$scope.$watchGroup($scope.timers, ...)代替$scope.$watchGroup([$scope.timers], ...)