2013-01-10 54 views
1

我有一個由函數生成的數據結構。它以相反的順序返回最後30天(如11,10,9,8等)作爲對象數組。ng-repeat不起作用

function HoursCtrl($scope) { 
    $scope.days = function() { 
     var d = new Date(); 
     var result = []; 

     for (i = 0; i < 31; i++) { 
      result.unshift({day:d.getDate() });  
      d.setDate(d.getDate() - 1); 
     } 
     return result; 
    }; 
}; 

下面是函數的輸出:

[ { day: 9 }, { day: 8 }, { day: 7 }, { day: 6 }, { day: 5 }, etc. ] 

我使用納克 - 重複,以暴露該數據作爲一個列表:

<div ng-controller="HoursCtrl"> 
    <ul> 
    <li ng-repeat="day in days">{{day.day}}</li> 
    </ul> 
</div> 

沒有被產生的li元素!我錯過了什麼?

+0

順便說一句,任何你使用'unshift'的原因,而不是o f只是反向循環? –

+0

您是否在控制檯中發生堆棧溢出或Range錯誤?如果是這樣,那是因爲你不能重複新創建的每一次對象 - 它們會得到每個$摘要的新範圍。你可以通過給它們添加一個$$ hashKey來解決這個問題。 – jpsimons

回答

3

您需要將其作爲函數調用。

ng-repeat="day in days()" 
+4

這會導致每個'$ digest'循環都會調用'days' ... –

+1

+1是的。是的,它會。但他想知道爲什麼它不起作用,而不是「最好的辦法是什麼?」。這就是爲什麼。 –

3

而是建立一個功能上的範圍的方法,只是填充的範圍days屬性:

function HoursCtrl($scope) { 
    var d = new Date(); 
    $scope.days = []; 
    for (var i = 0; i < 31; i++) { 
     $scope.days.unshift({day:d.getDate() });  
     d.setDate(d.getDate() - 1); 
    } 
}; 

爲了獲得更好的性能,您可以在反向嘗試循環和使用push代替unshift

function HoursCtrl($scope) { 
    var d = new Date(); 
    var counter = 31; 
    var date = d.getDate(); 

    $scope.days = []; 
    d.setDate(date - counter + 1); 

    while (counter--) { 
     date = d.getDate(); 
     $scope.days.push({ day: date });  
     d.setDate(date + 1); 
    } 
};