避免在每次迭代时过度写入值Javascript AngularJS

时间:2015-10-11 19:01:09

标签: javascript html angularjs

我正在创建一个日期选择器。这将显示日期列表。假设当前日期是10月12日,因此它将在可滚动列表中显示当前日期的下一个365天。我正在使用for循环,但日期列表不会出现。这是写作过程。为此,我想,我需要创建一个单独的数组。我将不得不在简单的Javascript,AngularJS而不是jQuery中完成它。请检查下面的代码。



function Ctrl($scope)
{   
    for (i=1; i<=365; i++){
    $scope.date = new Date();
    }
}
&#13;
<div ng-app ng-controller="Ctrl">
    {{date | date:'MMM-dd'}}<br/> 
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您需要使用日期填充数组,然后使用ng-repeat渲染它们。

function Ctrl($scope){   
  $scope.dates = [];
  var date = new Date();
  for(var i = 1; i < 365; i += 1) {
    $scope.dates.push(date.setDate(date.getDate() + 1););
  }
}



<div ng-app ng-controller="Ctrl">
    <div ng-repeat="date in dates">{{date | date:'MMM-dd'}}</div>
</div>

答案 1 :(得分:1)

我建议用另一个版本来解决问题:

<强>编辑: 但是,$scope.dates.push(date.setDate(date.getDate() + 1)); Demo )比我的以下代码更快(setTime(...))( Demo

function TodoCtrl($scope) {
    var count = new Date();
    $scope.dates = [];
    for (var i = 1; i <= 365; i++) {

        $scope.dates.push(count);
        var next = new Date();
        next.setTime(count.getTime() + (1000 * 3600 * 24))
        count = next;
    }
}

更新:

你可以在没有静态365的情况下做到这一点;的 Demo

function TodoCtrl($scope) {

    var day = new Date();
    var end = new Date();
    end.setYear(2016)
    $scope.dates = [];
    while (end > day) {
        $scope.dates.push(day.setDate(day.getDate() + 1));
    }
}