我循环一个数字(从0到7)以获得第二天的索引 在这里,贝娄是一个小提琴。
问题是第一天不是"星期一",而是星期五。所以,这个数字不是0而是4 ......
我不明白问题出在哪里 请帮忙
(function(){
var app = angular.module('myApp', [ ]);
app.controller('CalenderController', function(){
this.firstDay = -1;
this.getDayName = function(){
this.firstDay++;
if(this.firstDay == 7){
this.firstDay = 0;
}
return dayNames[this.firstDay];
};
this.dayLength = function(){
return new Array(13);
}
});
//Variables
var dayNames = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'];
})();

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script>
<div class="container" ng-app="myApp" ng-controller="CalenderController as calender">
<div ng-repeat="item in calender.dayLength() track by $index">
{{calender.getDayName()}}
</div>
</div>
&#13;
答案 0 :(得分:1)
将副作用留在Angular正在观看的功能中是一个非常糟糕的主意。从表达式{{something()}}
中调用的任何函数都将在每个摘要周期进行评估,因此,这些函数必须为idempotent。
getDayName
函数不是幂等的,因为它会更改this.firstDay
。
不仅如此,它还会在每次调用时返回不同的值,因此它会导致摘要周期重新运行(直到10次迭代后它被Angular中止)。
相反,请直接使用$index
访问dayName
数组:
<div ng-repeat="item in calendar.dayLength()">
{{calendar.dayNames[$index % 7]}}
</div>
并将dayNames
公开为具有this.dayNames
的虚拟机。
编辑:第二个想法,最好把它作为一个函数公开,这样你就可以在那里做mod:
$scope.getDayName = function(dayIndex){
return dayNames[dayIndex % 7];
}
并在视图中:
{{calendar.getDayName($index)}}
编辑2:如果您在2周内的所有日期都不需要<div>
s的平面DOM层次结构,那么您甚至可以更简单地执行此操作:
<div ng-repeat="week in [0, 1]">
<div ng-repeat="day in dayNames">
{{day}}
</div>
</div>