如果在 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);
    }
}