ng-repeat不起作用

时间:2013-01-10 19:02:55

标签: javascript arrays object angularjs

我有一个由函数生成的数据结构。它以相反的顺序返回最后30天(如11,10,9,8等)作为对象数组。

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. ]

我正在使用ng-repeat将此数据公开为列表:

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

没有生成li元素!我错过了什么?

2 个答案:

答案 0 :(得分:3)

您需要将其称为功能。

ng-repeat="day in days()"

答案 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);
    }
};