2016-12-12 57 views
0

我有下面的代碼部分:如何在修改對象後調用ng-repeat函數?

<ul class="list-group" ng-init="curMarks=getTaskVotesModalInfo(task)"> 
    <li ng-repeat="info in curMarks" class="list-group-item"> 
    <span>{{info.worker}}</span> 
    <span class="badge">{{info.mark}}</span> 
    </li> 
</ul> 

所有的罰款。但是當任務更新 - getTaskVotesModalInfo()不重新計算數據。 任務是$scope.Tasks數組的一部分。

我該如何解決?

UPD:getTaskVotesModalInfo功能

$scope.getTaskVotesModalInfo = function(task) { 
    var taskId = task.id; 
    var result = {}; 
    angular.forEach($scope.ScrumWorkers, function(value) { 
     var curWorkerId = value.value; 
     if (curWorkerId == 0) { 
      return; 
     } 
     result[curWorkerId] = { 
      mark : 'not voted', 
      worker : 'not set' 
     }; 
     result[curWorkerId].mark = $scope.TasksVotes[taskId][curWorkerId]; 
     result[curWorkerId].worker = value.text; 
     return result; 
    } 
+1

你是什麼意思任務更新? getTaskVotesModalInfo(task)的代碼在哪裏? ng-init可能只在初始化時運行一次,然後在更新時不再運行? – Matthias

+0

'ngInit'只執行一次。發佈'getTaskVotesModalInfo'函數以獲得更好的建議。 – dfsq

回答

1

的問題是其僅被執行一次 'NG-INIT'。

您可以直接在ng-repeat中使用'getTaskVotesModalInfo(task)'函數,而不是在ng-init中啓動curMark。然後角將處理更新。

<li ng-repeat="info in getTaskVotesModalInfo(task)"> 

下面是一個例子:Plunker

和更優化的例子,其中「curMarks名單隻有後一個任務的變化更新:Optimized Plunker

+2

儘管這會起作用 - 不推薦。這個函數將在每個'$ digest'循環中進行評估 - 並且取決於函數的作用,它可以使頁面減慢很多。當在控制器中需要時運行該功能會更好。無論哪種方式,這將工作,只是意識到潛在的性能影響。 – tymeJV

+0

我已經添加了一個更優化的示例。 –