1

関数によって生成されるデータ構造があります。オブジェクトの配列として、過去 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 要素が生成されていません。私は何が欠けていますか?

4

2 に答える 2

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);
    }
};
于 2013-01-10T19:09:39.810 に答える
3

関数として呼び出す必要があります。

ng-repeat="day in days()"
于 2013-01-10T19:05:19.213 に答える