如果在 for 循环中,则在内部渲染事件
Render event inside if in forloop
我在 angular 中使用 fullcalendar,如果他们通过 if 检查,我想在日历中呈现我的数据。
以下是相同的三个略有不同的示例:
没有if语句的forloop:
for (var i = 0; i < response.length; i++) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[i], true);
}
带 if 语句的循环,但只渲染数组中的索引 0:
for (var i = 0; i < response.length; i++) {
if (new Date($scope.temp[i].date).getTime() >= $scope.time) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[0], true);
}
}
最后一个在数组中有 i-index 的:
for (var i = 0; i < response.length; i++) {
if (new Date($scope.temp[i].date).getTime() >= $scope.time) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[i], true);
}
}
第一个和第二个工作正常,但最后一个(我想要这样做)却不行。它变得未定义并出现错误:
TypeError: 无法读取 属性 未定义的“_id”
对我来说,第二个和第三个例子基本相同,怎么会这样呢?
在这种情况下,您的变量 i
在每个循环中递增...无论条件如何。当条件通过时,您只会推入 $scope.open_Courses
。因此,i
的索引很可能会高于 $scope.open_Courses
。例如,如果您的循环索引 (i
) 为 5,而 $scope.open_Courses
的长度为 2,则 $scope.open_Courses[5]
将是未定义的。
如果你想渲染最后一项,你需要传递一个有效的索引:
for (var i = 0; i < response.length; i++) {
if (new Date($scope.temp[i].date).getTime() >= $scope.time) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
var len = $scope.open_Courses.length;
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[len-1], true);
}
}
我在 angular 中使用 fullcalendar,如果他们通过 if 检查,我想在日历中呈现我的数据。
以下是相同的三个略有不同的示例:
没有if语句的forloop:
for (var i = 0; i < response.length; i++) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[i], true);
}
带 if 语句的循环,但只渲染数组中的索引 0:
for (var i = 0; i < response.length; i++) {
if (new Date($scope.temp[i].date).getTime() >= $scope.time) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[0], true);
}
}
最后一个在数组中有 i-index 的:
for (var i = 0; i < response.length; i++) {
if (new Date($scope.temp[i].date).getTime() >= $scope.time) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[i], true);
}
}
第一个和第二个工作正常,但最后一个(我想要这样做)却不行。它变得未定义并出现错误:
TypeError: 无法读取 属性 未定义的“_id”
对我来说,第二个和第三个例子基本相同,怎么会这样呢?
在这种情况下,您的变量 i
在每个循环中递增...无论条件如何。当条件通过时,您只会推入 $scope.open_Courses
。因此,i
的索引很可能会高于 $scope.open_Courses
。例如,如果您的循环索引 (i
) 为 5,而 $scope.open_Courses
的长度为 2,则 $scope.open_Courses[5]
将是未定义的。
如果你想渲染最后一项,你需要传递一个有效的索引:
for (var i = 0; i < response.length; i++) {
if (new Date($scope.temp[i].date).getTime() >= $scope.time) {
$scope.open_Courses.push({
id: $scope.temp[i].id,
title: $scope.temp[i].name,
start: new Date($scope.temp[i].date).getTime(),
editable: true,
className: 'b-l b-2x b-info',
location: $scope.temp[i].location,
info: $scope.temp[i].description
});
//render event to calendar
var len = $scope.open_Courses.length;
$('.calendar').fullCalendar('renderEvent', $scope.open_Courses[len-1], true);
}
}