【问题标题】:ng-repeat not workingng重复不起作用
【发布时间】:2013-01-10 19:02:55
【问题描述】:

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

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 元素没有被生成!我错过了什么?

【问题讨论】:

  • 顺便说一句,你有什么理由使用unshift 而不是反向循环?
  • 您是否在控制台中遇到堆栈溢出或范围错误?如果是这样,那是因为您不能对每次新创建的对象进行 ng-repeat 重复——它们每个 $digest 都会获得一个新范围。您可以通过向它们添加 $$hashKey 来修复。

标签: javascript arrays object angularjs


【解决方案1】:

你需要把它作为一个函数来调用。

ng-repeat="day in days()"

【讨论】:

  • +1 是的。是的,它会。但他想知道为什么它不起作用,而不是“最好的方法是什么?”。这就是原因。
【解决方案2】:

不用将函数设置为作用域上的方法,只需在作用域上填充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);
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多