【发布时间】:2016-06-03 00:48:29
【问题描述】:
问题
我有一个 AngularJS 应用程序,由于某种原因,我的 forEach 循环之一无法正常工作。当按钮上的功能单击但在初始加载时它不起作用时,循环似乎工作。
代码
所以我为页面正确设置了我的控制器。我在我的服务中调用一个函数,它触发我的 API 并返回一个数组:
控制器
var holidaysnew = getUserEventsById.getUserEventsById();
服务
app.service('getUserEventsById', function ($http) {
this.getUserEventsById = function () {
var holidays = [];
$http.get("http://localhost:9847/AceTracker.svc/GetAllEventsByUser?user_id=1").success(function (data) {
for (var key in data.GetAllEventsByUserResult) {
if (data.GetAllEventsByUserResult.hasOwnProperty(key)) {
holidays.push(data.GetAllEventsByUserResult[key])
}
}
});
return holidays;
};
});
所以在初始页面加载时,holidaysnew 被成功命中,并且是一个假期数组。该行下方是我的forEach 循环所在的位置,我想循环通过holidaysnew,但它似乎没有进入循环。
循环代码如下:
holidaysnew.forEach(function (hol) {
$scope.eventSources[0].events.push({
end: $filter('dateFilter')(hol.HOLIDAY_END),
start: $filter('dateFilter')(hol.HOLIDAY_START),
title: hol.HOLIDAY_TITLE,
color: $filter('colorEventFilter')(hol.HOLIDAY_EVENT_STATE_ID)
});
});
我有 console.log 和 holidaysnew 数组,它肯定会被填充。任何人都可以看到这个问题吗?
编辑:
服务似乎很好,并按预期返回数组(见下文)
但是当$scope.eventSources[0].events = holidayEvents; 代码运行时,它实际上似乎并没有设置事件。
holidayEvents 是一个数组吗?
编辑2:
以下是返回给服务的 JSON 示例:
{"GetAllEventsByUserResult":[{"HOLIDAY_END":"\/Date(1456358400000+0000)\/","HOLIDAY_EVENT_ID":1,"HOLIDAY_EVENT_STATE_ID":1,"HOLIDAY_START":"\/Date(1455926400000+0000)\/","HOLIDAY_TITLE":"Spain ","USER_ID":1},{"HOLIDAY_END":"\/Date(1454371200000+0000)\/","HOLIDAY_EVENT_ID":2,"HOLIDAY_EVENT_STATE_ID":2,"HOLIDAY_START":"\/Date(1454284800000+0000)\/","HOLIDAY_TITLE":"Italy ","USER_ID":1},{"HOLIDAY_END":"\/Date(1458000000000+0000)\/","HOLIDAY_EVENT_ID":3,"HOLIDAY_EVENT_STATE_ID":1,"HOLIDAY_START":"\/Date(1457568000000+0000)\/","HOLIDAY_TITLE":"Germany ","USER_ID":1},{"HOLIDAY_END":"\/Date(1481068800000+0000)\/","HOLIDAY_EVENT_ID":4,"HOLIDAY_EVENT_STATE_ID":3,"HOLIDAY_START":"\/Date(1480896000000+0000)\/","HOLIDAY_TITLE":"England ","USER_ID":1}]}
【问题讨论】:
-
$http是异步的……在返回的数组被填充之前,您不能循环遍历它
标签: javascript jquery arrays angularjs foreach